Adakah yang memiliki alat atau skrip yang secara rekursif akan memperbaiki izin file pada direktori?
Pada mesin Linux Ubuntu, banyak file disalin ke disk USB dengan izin penuh 777 (pengguna, grup, lainnya - baca, tulis, jalankan) dalam kesalahan. Saya ingin menempatkan mereka kembali di direktori pengguna yang diperbaiki.
Direktori harus 775 dan semua file lainnya bisa 664. Semua file adalah gambar, dokumen atau MP3, jadi tidak ada yang perlu dieksekusi. Jika bit direktori diatur maka perlu eksekusi, selain itu hanya perlu pengguna dan grup, baca dan tulis.
Saya pikir itu layak untuk memeriksa apakah ada utilitas seperti itu sebelum meretas skrip shell :)
linux
ubuntu
permissions
shell
filesystems
mlambie
sumber
sumber
Jawaban:
Ini harus melakukan trik:
sumber
find dapat melakukan trik sendiri dengan -exec:
untuk mencegah menemukan memunculkan chmod untuk setiap entri:
(ini secara efektif memanggil chmod sekali dengan daftar semua file sebagai parameter daripada satu chmod per file)
sumber
Jawaban ini tidak akan menyelesaikan masalah Anda, tetapi seseorang mungkin menemukan itu berguna untuk masalah serupa di mana file memiliki izin kurang dari yang seharusnya mereka lakukan.
Keajaiban adalah izin X, bukan x. Halaman manual chmod menggambarkannya sebagai berikut:
Ini tidak cocok dalam kasus Anda karena file Anda memiliki izin eksekusi, akan cocok dengan tes kedua.
sumber
Saya membuat skrip dari solusi freiheit, itu menambahkan pemeriksaan argumen dasar.
sumber
chmod: missing operand after ‘0644’
. Dapatkah saya menyarankan untuk membungkus pernyataan temuan dengan tanda cek untuk melihat apakah target itu ada?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
Jika Anda menggunakan ssh, ada baiknya untuk tidak memodifikasi
~/.ssh
izin.sumber
Saya membuat skrip bash yang sangat sederhana tempo hari karena saya perlu memperbaiki izin. Mengapa tidak ada utilitas formal untuk mengatur ulang izin dasar, non-root, file dan folder?
Script menggunakan find to 755 all folder dan 644 libraries. Itu kemudian menguji setiap file dengan diri untuk melihat apakah memiliki header elf biner. Jika tidak, ini memindai dalam dua karakter pertama untuk shebang
#!
. Ini 755 instance dan 644 segalanya setelah memeriksa untuk melihat apakah file sudah memiliki izin yang cocok.Kasus khusus ditangani dengan pengecualian seperti
*.bak
untuk file yang akan diabaikan.sumber
Saya menemukan solusi C-shell yang disederhanakan. Ini mungkin bukan bukti yang benar-benar bodoh tetapi harus bekerja untuk sebagian besar direktori. Ini menganggap perintah 'file' Unix berfungsi, dan menemukan file exec untuk meresetnya kembali ke izin exec:
sumber
Alternatif, yang tidak secara tepat menjawab permintaan asli, tetapi lebih mungkin apa yang ingin OP, adalah untuk menentukan izin secara simbolis. Misalnya, saya berasumsi bahwa OP ingin "menghapus akses tulis untuk umum, dan menghapus izin yang dapat dieksekusi dari semua file".
Ini dimungkinkan jika Anda menggunakan representasi izin simbolis.
Menulisnya dengan cara ini alih-alih secara eksplisit mengatur "0664" Anda menghindari secara tidak sengaja mengizinkan izin tambahan untuk file yang sebelumnya dikunci. Misalnya, jika suatu file adalah 0770 itu tidak akan menjadi 0664 karena kesalahan.
Untuk melakukan persyaratan pertama, Anda cukup menggunakan
chmod
:Untuk melakukan persyaratan kedua:
Atau untuk melakukan keduanya:
sumber