Bagaimana cara chown / chmod semua file dalam direktori saat ini?

56

Saya mencoba mengubah kepemilikan dan izin beberapa file (dan direktori) di direktori saat ini. Saya mencoba ini:

chown username:groupname .

... berharap itu akan memengaruhi semua file di direktori saat ini, tetapi sebaliknya hanya memengaruhi direktori tempat saya berada (yang merupakan kebalikan dari apa yang ingin saya lakukan). Saya ingin mengubahnya di semua file tanpa mempengaruhi direktori saat ini saya masuk

Bagaimana saya bisa chown dan chmod semua file dalam direktori saat ini?

Andrew
sumber
man chowndan man chmoddengan mudah menjawab pertanyaan Anda.
Shi
2
@ Si saya pikir itu pertanyaan yang adil. Membaca halaman manual itu tidak akan membantu. Globbing bukan bagian dari chmod. Itu dibangun ke shell. Juga membaca dokumentasi tentang globbing menyebalkan kehidupan Anda (saya menghabiskan banyak waktu untuk mencari tahu semua fitur zsh).
DJJ
1
@ DJJ:chown -R user:group .
Shi

Jawaban:

96

Anda ingin menggunakan chown username:groupname *, dan biarkan shell memperluas *ke isi direktori saat ini. Ini akan mengubah izin untuk semua file / folder di direktori saat ini, tetapi bukan isi folder.

Anda juga bisa melakukannya chown -R username:groupname ., yang akan mengubah izin pada direktori saat ini, dan kemudian muncul kembali di dalamnya dan semua subfolder untuk mengubah izin.

chown -R username:groupname *akan mengubah izin pada semua file dan folder secara rekursif, sementara meninggalkan direktori saat ini sendiri. Gaya ini dan gaya pertama adalah yang paling sering saya gunakan.

Darth Android
sumber
2
@Andrew Berhati-hatilah, dia bisa menjadi teman dan musuh bagi yang lelah atau tidak siap.
Darth Android
5
Juga, waspadalah terhadap bahaya periode. Karena ditempatkan tepat di sebelah "/" pada keyboard. Kesalahan ketik sederhana dapat dengan mudah berubah chown -R username:groupname .menjadi chown -R username:groupname /. Membuat tugas 2 detik menjadi mimpi buruk 2 hari.
Teynon
@ Tom Itu sebabnya saya mungkin harus mulai menggunakan -vsemua perintah rekursif saya, tapi terlalu malas
Kolob Canyon
Hanya terpilih sebagai anwser terbaik dan paling ringkas, meskipun saya akan spesifik dan menamai direktori, hanya untuk menghindari slip keyboard:chown -R username:groupname directoryname
Dave Everitt
9

Saya pikir Anda menginginkan ini:

chown username:groupname *

Jika Anda juga ingin mengubah subdirektori secara rekursif, Anda perlu sakelar -R( -rtidak digunakan lagi):

chown -R username:groupname *

djf
sumber
0

chownsangat bagus jika Anda adalah pengguna super. Saya mempunyai masalah ketika orang lain menjalankannya makedi direktori saya, dan sekarang memiliki beberapa file yang tidak dapat saya modifikasi. Ini solusi saya yang menangani file dan direktori, meskipun ia meninggalkan direktori dengan sufiks .mkmeownerjika tidak bisa menghapusnya.

  • Skrip berikut mengubah kepemilikan file dan direktori yang diteruskan untuk dimiliki oleh pengguna saat ini, berusaha untuk mengatasi masalah izin dengan membuat salinan baru dari setiap direktori atau file yang tidak dimiliki oleh pengguna saat ini, menghapus (atau mencoba menghapus) file asli, dan mengganti nama dengan tepat.
  • Maksudnya adalah singkatan untuk "make me owner". Saya tidak menggunakan garis bawah karena mereka sulit diketik.

Contoh:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • Ini membutuhkan skrip berikut mkmeowneroneuntuk berada di jalur Anda.

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1
sbcondor
sumber
1
(1) Kami lebih suka jawaban yang menyertakan beberapa penjelasan. Saya terkejut ketika saya membaca skrip Anda dan melihat apa yang mereka lakukan, karena paragraf pengantar Anda tidak memberi saya petunjuk. (2) Anda lupa menyebutkan bahwa pengguna harus memasukkan mkmeowneroneke dalam PATH pencarian.  mkmeownerakan meledak jika itu tidak dilakukan. (3) Silakan pelajari bagaimana (yaitu, kapan dan di mana) menggunakan kutipan dalam perintah dan skrip shell. Mengatakan ${f}bukanlah alternatif yang berguna; lihat ini . … (Lanjutan)
Scott
(Lanjutan) ... (4) Jika Anda menjalankan skrip pada direktori, itu berpotensi menyalin setiap file dalam direktori itu dua kali. (5)  exprkuno. Ini lebih efisien untuk melakukan pencocokan string sederhana di shell; bash juga mendukung pencocokan ekspresi reguler. Untuk itu, Anda bisa melakukan tes nama file di find. (6) expr matchPerintah Anda menguji apakah ${f}berakhir dengan mkmeowner, bukan apakah itu berakhir dengan .mkmeowner. Karenanya, skrip tidak akan bekerja dengan sendirinya. … (Lanjutan)
Scott
(Lanjutkan) ... Sekarang, bisa dibilang, ini adalah hal yang baik - Anda tidak ingin bergerak dan berpotensi menghapus skrip saat sedang berjalan. (Ini tidak selalu akan menyebabkan masalah, tetapi bisa berantakan.) Tapi Anda harus memahami (dan mendokumentasikan) kasus-kasus khusus seperti itu. (7) Anda mungkin ingin menggunakan garis bawah dalam string multi-kata.  dirorfilesulit dibaca dan dipahami (dibandingkan dengan dir_or_file), dan ketika saya melihat mkmeowner, pikiran pertama saya adalah kucing ( mk +  meow +  ner).
Scott
Terima kasih atas catatannya Scott. 1. Saya pikir saya memang punya penjelasan tetapi biarkan saya menjadi lebih eksplisit. 2. poin yang bagus. Saya telah menangkap itu dalam naskah asli saya, tetapi mengambil referensi. 3. Saya sudah menulis skrip shell selama 30 tahun, tetapi tentu saja, saya akan mencoba belajar lebih banyak. 4. Ya. Sengaja karena jika saya tidak memiliki direktori, saya tidak dapat menghapusnya. Saya bisa menyebutkan itu. 5. Yah aku kuno, tapi expr masih bekerja dengan baik 6. ha poin yang bagus. 7. Saya mungkin, saya pikir saya akan mendapatkan lisensi artistik, karena garis bawah bukan aturan. Saya membutuhkan skrip yang membuat meow!
sbcondor
Saya tidak berpikir ada yang salah dengan $ {f}, kan? Itu hanya sedikit lebih lama dari yang diperlukan. Ini adalah format yang sering saya gunakan karena saya mungkin ingin menggunakan variabel untuk membuat string yang lebih panjang seperti $ {f} .mkmeowner, dan saya tidak perlu mengingat apakah $ f.heck berarti $ {f} + heck atau $ { f.heck}
sbcondor