775/664以外のアクセス許可を持つディレクトリとファイルを検索します


21

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バージョンで実行されています。

回答:


39

次の-permテストとfind組み合わせて使用し-notます。

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

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


美しい、ありがとう!2つの異なる条件(たとえば、タイプ-dとタイプ-f)を設定できることも、-permについても知りませんでした。
dotancohen

-notこれはPOSIX標準ではないことに注意してください。!代わりに使用します。
user1404316

2

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

だから、これは私がUbuntu 16.04で正常に使用しているものです

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

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


実際、目標はファイルの許可を変更することではなく、実稼働Webサーバーにアップロードするときにスノーフレーク許可が必要なファイルを特定することでした。ありがとう。
dotancohen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.