Ich möchte wiederholt etwas in einer Liste von Dateien tun. Die fraglichen Dateien haben Leerzeichen in ihren Namen:
david@david: ls -l
total 32
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha
-rw-rw-r-- 1 david david 0 Mai 8 11:55 haha~
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (3rd copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (4th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (5th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (6th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (7th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (another copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (copy)
Jetzt möchte ich jede dieser Dateien statisieren:
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(Ich benutze Echo und eine Pipe, um mehrzeilige Befehle zu schreiben.)
Wenn ich das mache, funktioniert es korrekt bei Dateien, deren Namen keine Leerzeichen enthalten. Aber die anderen ...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
Das Wechseln $(ls)zu "$(ls)"oder $filezu "$file"funktioniert nicht. Was kann ich machen?
Bearbeiten:
echo '
for files in *
do
stat "$files"
done' | bash
macht den Trick! Da ich neu in Bash bin, möchte ich die Dinge so einfach wie möglich halten - also nichts mit dem Versuch, Leerzeichen zu entkommen, oder mit xargsoder der Lösung mit read -r, obwohl sie das Problem lösen.
Wie einige gefragt haben: Ja, dies anstelle zu verwenden stat *ist seltsam. Aber ich wollte nur einen allgemeinen Weg finden, um denselben Befehl mit einer for-Schleife auf eine Reihe von Dateinamen in bash anzuwenden. So statkönnte stehen für gzip, gpgoder rm.
stat *? (;-)