쉘프로그래밍 질문입니다. for문에서 find할때 파일이 공백이 있

sunbee의 이미지

for file in $( find . -name 'aa*' -print)
do
    echo $file
done

이렇게 실행하면 aa 로 시작되는 파일은 다 찾는데.. 문제는요..
aa bbc da.avi
aa bbc db.avi
이런 파일들은

Quote:

aa
bbc
da.avi
aa
bbc
db.avi

이렇게 결과가 나옵니다..

즉 공백이 들어간 파일명은 제대로 검색이 안된단 말인데요..
해결책이 없을까요~?

azirael의 이미지

for file in "$( find . -name 'aa*' -print)"
do
    echo "$file"
done
crimsoncream의 이미지

IFS=$'\n'; for i in $(find -name "aa*"); do echo $i; done azirael님의 방법은 전체 파일명이 하나의 필드로 간주되어 버릴 것 같습니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

netj의 이미지

제가 주로 쓰는 방법:

find -name "aa*" | while read; do
  file=$REPLY
  echo "$file"
  ...
done

제약점은, BSD의 sh는 read의 인자가 없으면 불평을 하더군요. :(

코퍼스의 이미지

펄의 find 모듈을 쓰기를 강력히 권합니다.^^
저는 특별한 경우가 아닌데도 왜 사람들이 일반 쉘 스크립트에 노력하는 지 모르겠습니다.
펄이나 하다못해 파이썬을 하면 한 큐에 해결될텐데 말입니다.

A few Good Man

cinsk의 이미지

$ find . -print0 | xargs -0 some-command