特定の権限(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に設定されます。少し速くすることができます(更新するファイルを選択するロジックと、数百万のファイルの権限を更新するロジックが少なくなります。これは、正しいファイル数によって異なります)。
答え2
すべてのファイルとディレクトリに対して755の権限を持っている場合は、再帰的にchmodを実行します。
chmod -R 755 $directory
ファイルがモード644になる必要がある場合は、より良いかもしれません。
chmod -R u=rwX,go=rw $directory
これは、単一のプロセスを使用して必要なファイルを見つけ、必要に応じてその権限を更新します。
他の理由で異なる権限を持つファイルを見つける必要がある場合は、これがfind
最善の選択になります。
答え3
mlocateがインストールされている場合は簡単ですが、ファイル名の一部を知っている場合にのみ可能です。また、mlocate.db ファイルの権限を変更しない限り、root 権限が必要です。
インストール後は、cronジョブを定期的に実行してmlocateデータベースを更新する必要があります。または、Updatebを実行して手動でこれを実行できます。一度位置コマンドを使用します。