この質問にはすでに回答があります:
コメント
回答
これが-prune
オプションの目的です。
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
これは基本的に「ifthere」saディレクトリを示しますavoid_this_directory_please
と呼ばれ、入力しないでください。入力しないと、「通常のファイルの場合は、パス名を出力してください」。
コメント
-
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
と同じものを少し異なる方法で書くつもりでしたが、構文の方が好きです。ありがとう。
- @TimKennedy
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
を実行したい場合は、おそらく親が必要になります。
- 良い点です。 'かっこを使っていつ、どこでそれを学んだかさえわかりません。その時代は時間の霧の中で失われます。 🙂
- もちろん、これにより、トップレベルのディレクトリだけでなく、ツリー内の任意の場所で
avoid_this_directory_please
と呼ばれるディレクトリが削除されます。 -path
では、のマニュアルページ( Xen2050によって以下に引用)と述べています。
-
-prune
が最初の引数。-type
を含み、find / -type f -path /proc -prune -o -name foo -print
でディレクトリを削除できないことに戸惑いました。同じコマンドで-type d
と-type f
の両方を表示したことが、私にとってクリックした理由です。これで、ようやくfind
を使用できるようになりました。ありがとうございます。
回答
ディレクトリを回避するには、-pathテストを試してください。
find . -type f ! -path "*/avoid_this_directory_please/*"
コメント
でも、パスに入り、すべてを調べます。
man find
の-path
セクションで、他の2つの回答を組み合わせているようです
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print