J'ai une entrée (disons un fichier). Sur chaque ligne, il y a un nom de fichier. Comment puis-je lire ce fichier et afficher le contenu de chaque fichier?.
Quelque chose comme ça ferait:
xargs cat <filenames.txt
Le programme xargs
lit son entrée standard et, pour chaque ligne d'entrée, exécute le programme cat
avec les lignes d'entrée en tant qu'argument (s).
Si vous voulez vraiment faire cela en boucle, vous pouvez:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"foreach" n'est pas le nom de bash. C'est simplement "pour". Vous pouvez faire les choses en une seule ligne comme:
for fn in `cat filenames.txt`; do cat "$fn"; done
Référence: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Voici une boucle while
:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
xargs --arg-file inputfile cat
Cela produira le nom du fichier suivi du contenu du fichier:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Vous voudrez probablement gérer les espaces dans vos noms de fichiers, aussi odieux qu'ils soient :-)
Donc, je choisirais initialement quelque chose comme:
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> _
cat `cat filenames.txt`
va faire l'affaire