Bash foreach döngüsü


158

Bir girdim var (bir dosya diyelim). Her satırda bir dosya adı vardır. Bu dosyayı nasıl okuyabilir ve her birinin içeriğini nasıl görüntüleyebilirim.

Yanıtlar:


234

Böyle bir şey yapardı:

xargs cat <filenames.txt

xargsProgram standart giriş okur ve girişin her hat için çalışan catdeğişken (ler) olarak giriş hatları ile programı.

Bunu gerçekten bir döngüde yapmak istiyorsanız, şunları yapabilirsiniz:

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done

3
Her ikisi de dosya adları boşluk içerdiğinde çalışmaz.
mivk

@mivk uzaydan kaçabilirsiniz
Toochka


18

İşte bir whiledöngü:

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt

Bu en iyi yaklaşım olmalıdır. '-R' & '-d' seçeneğiniread
sjsam

1
Buradaki diğer yanıtların çoğundan farklı olarak, dosya adları boşluk olsa bile bu gerçekten işe yarar.
mivk


4

Muhtemelen dosya adlarınızdaki boşluklarla başa çıkmak isteyeceksiniz, ancak bunlardan nefret ediyor :-)

Bu yüzden başlangıçta şöyle bir şey tercih ediyorum:

pax> cat qq.in
normalfile.txt
file with spaces.doc

pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>

pax> _


0

Hepsinin uzantısı aynı ise (örneğin .jpg), bunu kullanabilirsiniz:

for picture in  *.jpg ; do
    echo "the next file is $picture"
done

(Bu çözüm, dosya adında boşluk varsa da çalışır)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.