Özyinelemeli mod yalnızca dizinlerde çalışır, dosyalarda çalışmaz. '* .Pdf' globunu kullanarak kabuk, dosya listesini chown'a geçirir, ki bunlar dosya görür ve gördüğü dosyalardaki izinleri değiştirir ve hepsi bu kadar.
Unutmayın, kabuklarda, küre komut tarafından değil kabuk tarafından değerlendirilir. Eğer glob dosyalarla eşleşirse, komuta geçer ve komut bir globun var olduğunu asla bilemez. (Bu, Windows Komut isteminin işleri yapmak için kullandığından farklıdır). Bir kir varsa, içeriği ile bir şey:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
Ve sen yazdın:
chown -R someuser:somegroup *.pdf
Kabuk ilk önce listeyi yapar: file1.pdf file2.pdf
ve sonra komutunu çalıştırın:
chown -R someuser:somegroup file1.pdf file2.pdf
Gördüğün gibi -R'nin çalışması gereken bir dizin yok. İstediğiniz şeyi yapar - komut satırındaki iki dosyadaki sahipliği değiştirerek ilginç -R bayrağını yok sayarak.
İstediğiniz şeyi yapmak için, '* .pdf' find
dosyasını bu dizin ve alt dizinler için bir kalıp olarak kullanmak için , bir dosya adı desenine uyan (veya diğer birçok ölçüt) dosyaları bulabilen ve bir alt komuta geçirebilen kullanabilirsiniz.
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
Bu, şu anki dir 'ile başlar. isim desenindeki dosyaları (filetip f) aramak için '*.pdf'
chmod komut satırı oluşturan xargs komutuna geçer. Desenin etrafındaki tırnaklara dikkat edin, '*.pdf'
kabuğun yapabiliyorsa bir küre oluşturacağını unutmayın; ancak kalıbın iletilmesini istiyorsanız, find
alıntı yapmanız gerekir.
Dosya adlarında boşluklar olabileceğinden, boşluklarla dosya adını güvenli hale getirmek için bir numara kullanmak istersiniz:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
Bash 3 ve daha düşüklerde, yapmanız gereken budur. Bash 4 (with shopt -s globstar
) ve diğer kabuklarda daha güçlü globbing mevcuttur . Özyinelemeli bir glob kullanarak, zsh aynı **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
birlikte özyinelemeli globbing yapmak için düzenlenmiştir.