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
。