for
-loop sağlanan dizede her (boşluk ayrılmış) girişi üzerinde yinelemeli olacaktır.
Gerçekte find
komutunu çalıştırmazsınız, ancak bu dizeyi (for
-loop tarafından yinelenen) dize olarak sağlayın. Bunun yerine çift tırnak ya komutu ters tırnak veya $()
kullanımı: Dosya yollar/adları boşluk içeriyorsa
for line in $(find . -iname '*.txt'); do
echo "$line"
ls -l "$line"
done
Ayrıca, bu yöntem, (boşluk ayrılmış girdileri üzerinde for
-loop dolaşır çünkü) başarısız olur. Bunun yerine, dogbanes answer'da açıklanan yöntemi kullanmak daha iyidir.
deyişiyle, tüm uzay ayrılmış girdileri üzerinde for line in "find . -iname '*.txt'";
yinelenir::
- bulmak
hatanızı netleştirmek için.
- -iname
- '* .txt' (Bence ...)
ilk iki (istenmeyen davranışın yanı sıra) bir hataya yol yok, ama o yürütür gibi üçüncü problemlidir :
ls -l -iname
tek karakter seçenekleri birleştirebilirsiniz (bash) komutları bir sürü, bu yüzden -iname
-i -n -a -m -e
aynıdır. Ve voila: senin invalid option -- 'e'
hata! dosya adlarında boşluk ve yeni satır kolları olarak burada
+1 Bu sadece daha iyi değil, doğru. – chepner
Bu parçacığı içeren komut dosyası bir cronjob @reboot içinde çağrıldığında bunu çalışmasıyla ilgili sorun yaşıyorum. Okuma komutunun -d bayrağı hakkında şikâyet eder ve daha sonra yürütme başarısız olur. Aksi halde harika çalışıyor. –
Başta çalışır, değil sh. – Antzi