2009-07-06 18 views
7

Bazı kabuk komut dosyalarını öğrenmek için çalışmaya başladı. Bir dosyada çalışan bir perl betiğim var. Perl betiğini, "filename" anahtar sözcüğüyle tüm dosyalarda bir kaç kez çalıştırmak için bir kabuk betiği nasıl yazabilirim? İngilizce Yani Unix dosyasında birden çok dosya üzerinde bir betik çalıştır.

,

for /filename/ in filenames 
    perl myscript.pl completefilename 

teşekkürler. Bash olarak

cevap

10
find . -name "filename*" -exec perl myscript.pl '{}' \; 
1

:

files=`ls -1 *` 
for $file in $files; 
do 
    perl myscript.pl $file; 
done 
+0

Bu yalnızca, içinde boşluk bulunan dosya adları olmadığı sürece çalışır. – hillu

4
find . -path "\*filename\*" -exec perl myscript.pl {} \; 

düzenleme: kaçan yıldız, burada

4
for i in $(\ls -d filenames) 
do 
    perl myscript.pl $i 
done 

işaretlemeyi 'ls' komutu önünde ters eğik çizgi geçici olarak herhangi bir takma ad devre dışı bırakmaktır istemiyordu. Örneğin Yerine de joker karakterler kullanabilirsiniz Filenames boşlukla ayrılmış listesinin $ for file in filename1 filename2 filename3; do perl myscript $file; done

,:

$ for file in *.txt *.csv; do perl myscript $file; done

1

Bir astar

dosya adlarınızda boşluk var, eski bekleme süresini kullanın

find . -maxdepth 1 -print0 | xargs -0 perl myscript.pl 
2

Ve eğer HTH

0

sana kişisel alt dizinleri bir dizi ardışık bir komutu çalıştırmak için çok güzel bir yol verir zsh kabuk kullanın. Aynı zamanda, .wav dosyalarının MP3 dosyalarını oluşturmak için topal kullanırken dosyanın son ekini değiştirmenize de olanak tanır: i12/d. Wav için iw12:

; lame $ i $ i: r.mp3

Ayrıca bir komutun çıktısını başka bir parçaya da aktarabilirsin, bir dizi bittorrent dosyasını indirirken sık kullandığım bir şeydir ve her bir indirme yüzdesini görmek istiyorum i in **/*. txt için tamamlandı:

; grep -H yüzde $ i | kuyruk -1

İlgili konular