Я хочу сделать что-то несколько раз в списке файлов. У файлов в вопросах есть пробелы в их именах:
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)
Теперь я хочу оценить каждый из этих файлов:
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(Я использую echo и pipe для написания многострочных команд.)
Когда я это делаю, он корректно работает с теми файлами, в именах которых нет пробелов. Но остальные ...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
Изменение $(ls)к "$(ls)"или $fileк "$file"не работает. Что я могу сделать?
Редактировать:
echo '
for files in *
do
stat "$files"
done' | bash
делает трюк! Поскольку я новичок в bash, я хочу, чтобы все было как можно проще - не пытаясь избежать пробелов, использовать xargsили read -rрешить их, хотя они решают проблему.
Как некоторые спрашивают: да, использовать это вместо stat *странно. Но я просто хотел найти общий способ применения одной и той же команды к группе имен файлов в bash, используя цикл for. Так statможет стоять gzip, gpgили rm.
stat *? (;-)