Chcę coś robić wielokrotnie na liście plików. Pliki w pytaniach mają spacje w nazwach:
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)
Teraz chcę statystyki każdego z tych plików:
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(Używam echa i potoku do pisania poleceń wieloliniowych.)
Kiedy to robię, działa poprawnie na plikach, które nie mają spacji w nazwach. Ale inni ...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
Zmiana $(ls)na "$(ls)"lub $filedo "$file"nie działa. Co mogę zrobić?
Edytować:
echo '
for files in *
do
stat "$files"
done' | bash
Zrób sztuczkę! Ponieważ jestem nowy w bash, chcę, aby wszystko było tak proste, jak to możliwe - więc nic z próbą ucieczki ze spacji, użycia xargslub rozwiązania read -r, chociaż rozwiązują problem.
Jak niektórzy pytają: Tak, używanie tego zamiast stat *jest dziwne. Ale chciałem tylko znaleźć ogólny sposób zastosowania tego samego polecenia na paczce nazw plików w bash, używając pętli for. Więc statmoże oznaczać gzip, gpglub rm.
stat *? (;-)