Apakah ada perintah atau panji untuk mengkloning kepemilikan dan izin pengguna / grup pada file dari file lain? Untuk membuat perms dan kepemilikan persis dengan file lain?
shell
permissions
files
chown
pengguna394
sumber
sumber
--reference
parameterchmod
danchown
sebelumnya :).Pada setiap unix dengan utilitas GNU, seperti Linux (tidak tertanam) atau Cygwin, Anda dapat menggunakan
chmod --reference
danchown --reference
.Jika sistem Anda memiliki ACL , coba perintah ACL
getfacl
dansetfacl
. Perintah-perintah ini sedikit berbeda dari sistem ke sistem, tetapi pada banyak Anda dapat menggunakangetfacl other_file | setfacl -bnM - file_to_change
untuk menyalin izin. Ini tidak menyalin kepemilikan; Anda dapat melakukannya dengan penguraian yang hati-hatils -l other_file
, dengan asumsi bahwa Anda tidak memiliki nama pengguna atau grup yang berisi spasi putih.sumber
Melakukan perintah bash berdasarkan respons Matteo :)
Kode:
chmod $( stat -f '%p' "$1" ) "${@:2}"
Pemakaian:
cp-permissions <from> <to>...
sumber
${*:2}
? Jangan pernah melakukan itu lagi! Itu akan gagal jika salah satu nama file mengandung spasi (atau tab). Gunakan"${@:2}"
. Juga, gunakan"$1"
bukan hanya$1
.chmod "$(stat -c '%a' "$fromfile")" tofile
dalam GNU Coreutils, tetapi Anda mungkin juga menggunakan--reference
dalam kasus itu karenastat
utilitas CLI bukan POSIX, bahkan mengatakan pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htmlyangls -l
tidak akan memotongnya: "Output dari ls (dengan -l dan opsi terkait) berisi informasi yang secara logis dapat digunakan oleh utilitas seperti chmod dan sentuh untuk mengembalikan file ke kondisi yang diketahui. Namun, informasi ini disajikan dalam format yang tidak dapat digunakan langsung oleh utilitas tersebut atau menjadi mudah diterjemahkan ke dalam format yang bisa digunakan. "Jika Anda tidak menggunakan sistem dengan chmod / chown GNU (yang mendukung
--reference
opsi), Anda dapat mencoba mengurai output darils -l
Berikut skrip kecil untuk
chmod
(jika Anda memiliki tampilan yang mendukung regex yang diperluas, skrip tersebut dapat ditulis dengan cara yang lebih mudah dibaca ...)PEMBARUAN :
Ini bahkan lebih mudah menggunakan
stat
:sumber
ls -l
mem -parsing output, Anda bisa mem-parsingstat
output.stat
sintaks * BSD di sini.chmod $(stat ...)
Perintah Anda tidak akan berfungsi karena%p
sendirian menghasilkan terlalu banyak informasi untuk * BSDchmod
, gunakan%Lp
hanya untuk output bit u / g / o. Sesuatu yang sedikit lebih rumit akan diperlukan untuk bit sticky / setuid / setgid.Saya ingin menambahkan penyesuaian pada skrip Matteo . A for loop harus digunakan untuk memvalidasi bahwa file ada sebelum benar-benar menjalankan perintah chmod pada mereka. Ini akan membuat kesalahan skrip lebih anggun.
Saya pikir ini adalah pilihan terbaik karena dapat digunakan untuk semua * nix OS, seperti Solaris, Linux, dll.
Saya menemukan bahwa di salah satu mesin Solaris 10 saya,
stat
tidak ditemukan. Itu mungkin masalah dengan konfigurasi saya.sumber
Ini bekerja untuk saya:
cp -p --attributes-only <from> <to>
sumber