次のフォルダ構造があります
| subdirectoy1
| |
| |_ file1.jpg
| |_ file2.jpg
| |_ ...
|
| subdirectory2
| |
| |_ file11.jpg
| |_ file12.jpg
| |_ ...
|
| ...
|
|_ file21.jpg
|_ file22.jpg
|_ ...
ご覧のとおり、フォルダのルートレベルにはいくつかのファイルとさまざまなサブディレクトリ(私のツリーでは2つ以上)があり、各ディレクトリにはより多くの画像が含まれています。
今私が思うことは私が望むものです探すルートレベルのイメージとイメージはサブディレクトリ1にありますが、いいえ別のディレクトリにあるもの。
さて、簡単な方法を使用して別のディレクトリを1つずつ除外できます。
find . -type f -not -path "*subdirectory2*" -exec ...
しかし、この行が他のフォルダの名前が指定されていない場合に適していれば幸いです。サブディレクトリ2など。
または、他の言葉にすると、次のように言える方法がありますか?
find . -maxdepth 1 ...
しかし、その境界の下にある特定のサブディレクトリを1つ除外するとどうなりますか?
答え1
以下に該当しないディレクトリをクリーンアップできますsubdirectory1
。
find . ! \( -name . -o -name subdirectory1 \) -prune -type f
後でファイルに実行したいアクションを追加できます-type f
。
仕組みは次のとおりです。
- 現在のディレクトリから開始
- 一致しないコンテンツを切り捨てる
.
(subdirectory1
他のディレクトリは無視) - 一般ファイルのみアーカイブ
- 一致しないコンテンツを切り捨てる
これにより、現在のディレクトリとその中のすべてのファイルが検索されますsubdirectory1
(subdirectory1
サブディレクトリには移動しません)。