Cara termudah adalah dengan menggunakan alat ACL, bahkan jika Anda tidak benar-benar menggunakan ACL. Cukup panggil getfacl -R . >saved-permissions
untuk mencadangkan izin pohon direktori dan setfacl --restore=saved-permissions
untuk memulihkannya.
Jika tidak, cara untuk mencadangkan izin adalah dengan find -printf
. (GNU diperlukan, tetapi itulah yang Anda miliki di Linux.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Anda mendapatkan file berisi catatan yang dipisahkan oleh karakter nol; setiap catatan berisi izin numerik, nama pengguna, nama grup, dan nama file untuk satu file. Untuk memulihkan, ulangi catatan dan panggil chmod
dan chown
. -depth
opsi untuk find
jika Anda ingin membuat beberapa direktori tidak dapat ditulis (Anda harus menangani isinya terlebih dahulu).
Anda dapat memulihkan izin dengan cuplikan bash ini yang berasal dari cuplikan yang dikontribusikan oleh Daniel Alder:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Anda dapat menggunakan skrip awk berikut untuk mengaktifkan find
output ke dalam beberapa kode shell untuk memulihkan izin.
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh
Instal paket ACL terlebih dahulu:
sudo apt-get install acl
Menyimpan secara rekursif izin dan kepemilikan untuk mengajukan:
getfacl -R yourDirectory > permissions.acl
Pulihkan (relatif terhadap jalur saat ini):
setfacl --restore=permissions.acl