web-dev-qa-db-ja.com

検索コマンドからディレクトリを除外することは可能ですか?

使っています find -type fコマンドを使用して、特定の開始ディレクトリからすべてのファイルを再帰的に検索します。ただし、一部のディレクトリでファイル名の入力および抽出を禁止したいのですが。だから基本的に私は次のようなものを探しています:

find . -type f ! -name "avoid_this_directory_please"

これに代わる機能的な代替品はありますか?

31
user219860

これが-Pruneオプションの目的です。

find . -type d -name "avoid_this_directory_please" -Prune -o -type f -print

これは基本的に「avoid_this_directory_pleaseという名前のディレクトリがある場合は入力しないでください。そうでない場合は、通常のファイルの場合は、そのパス名を出力してください」とあります。

37
Kusalananda

ディレクトリを回避するには、-pathテストを試してください。

find . -type f ! -path '*/avoid_this_directory_please/*'
10
Stephen Rauch

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
7
Xen2050

これを試して

find -name "*.js" -not -path "./directory/*"
5