Я хочу щось робити кілька разів у списку файлів. Файли у запитаннях мають пробіли у своїх назвах:
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
(Я використовую ехо та трубу для того, щоб писати багаторядкові команди.)
Коли я це роблю, він працює правильно на тих файлах, які не мають пробілів у їх іменах. Але інші ...
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
робить трюк! Щойно я новачок у баші, я хочу зробити все максимально простим - так нічого не намагаючись уникнути пробілів, не використовуючи xargsчи рішення read -r, хоча вони вирішують проблему.
Як деякі запитували: Так, використання цього замість stat *є дивним. Але я просто хотів знайти загальний спосіб застосувати ту саму команду на купі імен файлів у bash, використовуючи цикл for. Так statміг би виступати за gzip, gpgабо rm.
stat *? (;-)