Temukan direktori dan file dengan izin selain 775/664

21

Saya memindahkan situs web dari satu server ke server lain dan Git tidak menyimpan metadata seperti izin file. Saya perlu mencari direktori dan file yang tidak 775/664 masing-masing.

Saat ini, saya menggunakan alat berbatu ini:

$ 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'

Meskipun ini berhasil, saya merasa itu agak hacky. Apakah ada cara yang lebih baik untuk melakukan ini, mungkin cara kanonik, atau haruskah saya menjadi gila?

Ini berjalan pada versi Ubuntu terbaru dengan alat GNU di bawah Bash.

dotancohen
sumber

Jawaban:

39

Gunakan -permtes untuk finddikombinasikan dengan -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775cocok dengan semua file dengan izin yang persis sama dengan 775. -perm 664melakukan hal yang sama untuk 664.
  • -not (Boolean TIDAK) meniadakan tes yang mengikuti, sehingga cocok persis kebalikan dari apa yang akan terjadi: dalam hal ini, semua file yang tidak memiliki izin yang benar.
  • -o(boolean OR) menggabungkan dua set tes bersama, cocok ketika salah satu dari mereka melakukan: itu memiliki prioritas terendah, sehingga membagi tes kami menjadi dua kelompok yang berbeda. Anda juga bisa menggunakan tanda kurung untuk lebih eksplisit. Di sini kami mencocokkan direktori dengan izin yang bukan 775dan file biasa dengan izin yang tidak 664.

Jika Anda menginginkan dua perintah terpisah untuk direktori dan file, cukup potong menjadi setengahnya -odan gunakan setiap setengahnya secara terpisah.

Michael Homer
sumber
Cantik terimakasih! Saya tidak tahu bahwa dua kondisi berbeda dapat diatur (tipe -d dan tipe -f misalnya) juga tidak tahu tentang -perm.
dotancohen
Mungkin perhatikan bahwa -notitu bukan standar POSIX; mereka menggunakannya !sebagai gantinya.
user1404316
2

Saya tidak tahu kode apa yang ingin Anda capai. Biasanya alasan untuk menemukan File dan Direktori dengan izin yang salah adalah untuk tujuan mengubahnya.

Jadi inilah yang saya berhasil gunakan di Ubuntu 16.04

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

Ini menunjukkan! simbol sedang melarikan diri

NZ Dev
sumber
Sebenarnya tujuannya bukan untuk mengubah izin file tetapi untuk mengidentifikasi file mana yang memerlukan izin kepingan salju saat mengunggahnya ke server web produksi. Terima kasih.
dotancohen