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バージョンで実行されています。
-perm
テストをfind
に対して -not
と組み合わせて使用します。
find -type d -not -perm 775 -o -type f -not -perm 664
-perm 775
は、775
とまったく同じ権限を持つすべてのファイルに一致します。 -perm 664
は664
についても同様です。-not
(ブールNOT)は、後続のテストを無効にするため、本来のテストとは正反対に一致します。この場合、適切な権限を持たないすべてのファイルです。-o
(ブールOR)は、2つのテストセットを組み合わせて、どちらかが一致する場合に一致させます。優先順位が最も低いため、テストを2つの異なるグループに分割します。 かっこを使用 より明示的にすることもできます。ここでは、775
ではない権限を持つディレクトリと、664
でない権限を持つ通常のファイルを照合します。ディレクトリとファイルに対して2つの個別のコマンドが必要な場合は、-o
で半分に切り、それぞれを別々に使用します。
私はあなたのコードが何を達成しようとしていたのか分かりません。通常、不正な権限を持つファイルとディレクトリを見つける理由は、それらを変更するためです。
これは私がUbuntu 16.04でうまく使用しているものです
find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;
これは!エスケープされているシンボル