特定の権限(755)を持たないフォルダ内のファイルを見つける必要があります。このサブディレクトリには、合計数百万のファイルを含む他のサブディレクトリがあり、find ./ -not -perm 755
コマンドが長すぎます。
これを行うには、より効率的で高速なコマンドがあります(たとえば、lsとgrepなどの組み合わせ)。
ベストアンサー1
使用する場合は、ls -lR
何らかの方法で出力から項目を除いて必要なものをgrep
出力する必要があります。
find
おそらくより速いでしょう。ここに私のコンピュータのための非常に速いハッキングがあります(彼らはgrep
醜くて誇りに思っていません)。
tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668
real 0m3.247s
user 0m1.456s
sys 0m1.808s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185
real 0m0.503s
user 0m0.120s
sys 0m0.380s
tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668
real 0m3.128s
user 0m1.564s
sys 0m1.920s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185
real 0m0.501s
user 0m0.196s
sys 0m0.428s
いくつかの注意:
- キャッシュの違いの可能性を排除するために、これら2つのコマンドを2回実行しました。
- 彼らは別の数を返すことがわかります。私のクイックハックgrepは、関連ファイルとディレクトリエントリだけを分離するのに十分ではありませんでした。
- これの目的は、より良い解決策を示すことではなく、
find
raw +と比較してかなり高速であることを示すことです。ls
grep
perl
たとえば、より速い解決策やより速い実行を可能にする方法がありますls
(設定$LANG
? - 私のテストでは、この結果は2番目に少ない出力として表示されますls
。ls
。
編集:ちょうどあなたのコメントを見て、権限を変更する必要があると言いました。この場合、find
すべてを一度に行うので、確かに正解です。
find ./ -not -perm 755 -exec chmod 755 {} \;
あなたはする必要がありますとても慎重ですこのコマンドを実行するときは、正しい場所にあることを確認してください。より安全なオプションは、
find /actual/full/path -not -perm 755 -exec chmod 755 {} \;
したがって、間違った場所にいると、システム上のすべてのファイルが変更されるのを防ぐことができます。
また、ソフトリンク、ディレクトリ、および非正規ファイルも考慮し、find
それに応じてファイルを変更する必要があります。したがって、ファイルにのみ興味があると仮定すると、次から始めます。
find /actual/full/path -type f -not -perm 755 -exec chmod 755 {} \;
最後に、ディレクトリまたはディレクトリグループ内のすべてのファイルに対する権限を755から755に変更するかどうかを諮問することで、複雑な作業を行う必要はありません。
find /actual/full/path -type f -exec chmod 755 {} \;
これはすべて755に設定されます。少し速くすることができます(更新するファイルを選択するロジックと、数百万のファイルの権限を更新するロジックが少なくなります。これは、正しいファイル数によって異なります)。