findを使用してディレクトリを参照するときにパスを実際に除外する方法

findを使用してディレクトリを参照するときにパスを実際に除外する方法

次のようにすると:

mkdir /tmp/test
sudo mkdir /tmp/test/test2
sudo chmod 700 /tmp/test/test2
cd /tmp/test  

find ./ -not -path "*"私はtest2がパスではなくルールと一致することを確認したいと思います。これにより完全に排除されなければなりません。ただし、ルールに関係なくディレクトリを巡回しようとしたfind: ‘./test2’: Permission deniedことを意味します。find

sudo でコマンドを実行すると、ディレクトリは表示されません。これは、除外ルールが機能しますが、初期ルート中の検索条件ではなく、初期検索の出力に適用されることを意味します。

時間のかかるネットワークファイルシステムのマウントなど、特定の問題のあるディレクトリを除きながらルートファイルシステムの巡回を実装しようとしているので、全体の実行時間を短縮するためにサブディレクトリを探索せずに直接見てみたいと思います。

この目標をどのように達成できますか?

答え1

問題のディレクトリを「整理」する必要があります。これはfind、そのディレクトリの内容を処理しないように指示します。

find . -path "*" -prune

もっと現実的に、

$ find . -name test2 -prune
./test2

これはまだtest2自己処理されますが、入ろうとしないため、エラーは発生しません。

関連情報