Mode rekursif hanya berfungsi pada direktori, bukan file. Dengan menggunakan glob '* .pdf', shell mengirimkan daftar file ke chown, yang melihat ini adalah file, dan mengubah izin pada file yang dilihatnya, dan hanya itu.
Ingat, di shell, glob dievaluasi oleh shell, bukan perintah. Jika glob cocok dengan file, mereka diteruskan ke perintah dan perintah tidak pernah tahu ada glob. (Ini berbeda dari bagaimana Windows Command prompt digunakan untuk melakukan sesuatu). Jika Anda memiliki dir, dengan isinya sesuatu seperti:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
Dan Anda mengetik:
chown -R someuser:somegroup *.pdf
Shell pertama-tama akan membuat daftar: file1.pdf file2.pdf
dan kemudian jalankan perintah Anda:
chown -R someuser:somegroup file1.pdf file2.pdf
Lihat, tidak ada direktori untuk -R untuk ditindaklanjuti. Itu melakukan apa yang Anda tanyakan - mengubah kepemilikan pada dua file pada baris perintah, mengabaikan bendera -R yang unik.
Untuk melakukan apa yang Anda inginkan, untuk menggunakan '* .pdf' sebagai pola untuk direktori dan subdirektori ini, Anda dapat menggunakan find
, yang dapat menemukan file yang cocok dengan pola nama file (atau banyak kriteria lain) dan meneruskan ke subperintah.
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
Ini dimulai dengan dir saat ini '.' untuk mencari file (tipe file f) dari pola nama '*.pdf'
kemudian beralih ke xargs, yang membangun sebuah baris perintah ke chmod. Perhatikan tanda kutip di sekitar pola '*.pdf'
, ingat bahwa shell akan membuat gumpalan jika bisa, tetapi Anda ingin pola itu diteruskan find
, jadi Anda perlu mengutipnya.
Karena nama file mungkin memiliki spasi di dalamnya, Anda ingin menggunakan trik untuk menjadikannya nama file-dengan-spasi:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
Dalam bash 3 dan lebih rendah, ini adalah cara yang perlu Anda lakukan. Globbing yang lebih kuat tersedia di bash 4 (dengan shopt -s globstar
) dan cangkang lainnya. Hal yang sama di zsh, menggunakan bola rekursif **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
globbing rekursif.