파일 목록에서 반복해서 무언가를하고 싶습니다. 문제의 파일은 이름에 공백이 있습니다.
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
트릭을 수행합니다! bash를 처음 접했을 때 가능한 한 간단하게 유지하고 싶습니다 . 문제를 해결하더라도 공백을 탈출하려고 시도 xargs하거나 솔루션을 사용 하거나 아무것도 사용하지 마십시오 read -r.
일부 사람들이 물었 듯이 : 예, 대신 이것을 사용하는 stat *것이 이상합니다. 그러나 나는 for 루프를 사용하여 bash의 많은 파일 이름에 동일한 명령을 적용하는 일반적인 방법을 찾고 싶었습니다. 그래서 stat약자 수 gzip, gpg또는 rm.
stat *? (;-)