すべてのファイルを繰り返し、一部は動的にスキップします。

すべてのファイルを繰り返し、一部は動的にスキップします。

UNIXの新機能です。特定のディレクトリ内のすべてのファイルとサブディレクトリを繰り返し印刷するスクリプトを作成します。特定のディレクトリを動的にスキップできるようにしたいです。

私の考えは、指定されたディレクトリ内のすべての項目を繰り返すforループを作成することですfor i in $(find ./ -printf '%f\n') 。しかし、続行したくないディレクトリを見つけたら、そのディレクトリをスキップする方法があるかどうか疑問に思います。のように

if [ "$i" == something I don't want to go down ] 
then
   skip this directory
fi

これが可能かどうかはわかりません。クリーンアップ機能を使用してディレクトリをスキップする方法を見つけましたが、これを行うにはスキップするタイプを事前に知っておく必要があります。少なくともそれが私が理解していることです。ありがとうございます。

ベストアンサー1

はい、-execは同様に述語であり、-nameコマンドfindの終了状態を考慮し、ゼロ以外の場合はfalseとして扱います。

しかし、参考にしてくださいㅏ)これはテーブルでのみ機能します。-exec ... \;いいえ様式へ(常に正しい)-exec .. {} +雨)各ファイルまたはディレクトリに対して別々のプロセスをフォークすることは、遅い

たとえば、次のファイルを含むすべてのディレクトリをスキップしますfoo.txt

find . -type d -exec test -f {}/foo.txt \; -prune -or -print

$ mkdir -p a/{1,2,3}/{x,y,z}; touch a/{1,2,3}/{x,y,z}/a.txt
$ find . -type d -exec test -f {}/foo.txt \; -prune -or -print
... lots of files ...
$ touch a/{1,2}/foo.txt a/3/{x,y}/foo.txt
$ find . -type d -exec test -f {}/foo.txt \; -prune -or -print
.
./a
./a/3
./a/3/z
./a/3/z/a.txt

もちろん、test -f ...静的コマンドの代わりに使用することもできます。path/to/some/script {} ...。 GNU find(Linuxのデフォルト)を使用する-execdir-exec

おすすめ記事