web-dev-qa-db-ja.com

775/664以外の権限を持つディレクトリとファイルを検索する

Webサイトをあるサーバーから別のサーバーに移動していますが、Gitにはファイル権限などのメタデータが保存されていません。それぞれ775/664ではないディレクトリとファイルを見つける必要があります。

現在、私はこの石畳の仕掛けを使用しています:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

これは機能しますが、私はかなりハックだと感じています。これを行うためのより良い方法はありますか、おそらく標準的な方法ですか、それとも私はハックするだけですか?

これは、Bashの下でGNUツールを使用した最新のUbuntuバージョンで実行されています。

22
dotancohen

-perm テストをfindに対して -not と組み合わせて使用​​します。

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775は、775とまったく同じ権限を持つすべてのファイルに一致します。 -perm 664664についても同様です。
  • -not(ブールNOT)は、後続のテストを無効にするため、本来のテストとは正反対に一致します。この場合、適切な権限を持たないすべてのファイルです。
  • -o(ブールOR)は、2つのテストセットを組み合わせて、どちらかが一致する場合に一致させます。優先順位が最も低いため、テストを2つの異なるグループに分割します。 かっこを使用 より明示的にすることもできます。ここでは、775ではない権限を持つディレクトリと、664でない権限を持つ通常のファイルを照合します。

ディレクトリとファイルに対して2つの個別のコマンドが必要な場合は、-oで半分に切り、それぞれを別々に使用します。

40
Michael Homer

私はあなたのコードが何を達成しようとしていたのか分かりません。通常、不正な権限を持つファイルとディレクトリを見つける理由は、それらを変更するためです。

これは私がUbuntu 16.04でうまく使用しているものです

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

これは!エスケープされているシンボル

4
NZ Dev