때때로 디렉토리의 모든 파일을 반복하여 무언가를 찾고 일반적으로 for i in $(ls *.txt)
이 일반적으로 작동해야합니다. 그러나 폴더에 파일 수가 너무 많고 for
의 파일 수가 0403-027 The parameter list is too long.
(즉, for
, diff
, ls
또는 그 이상) 인 경우가 있습니다.KSH에서 너무 많은 인수가있을 때 반복 매개 변수 목록
입력 코드를 while read
으로 한 줄씩 읽는 중 하나의 해결책을 찾았지만 까다로운 부분이 있습니다. 그런 파일이 없습니다 물론 분리 (? 이상)과 같은 ^J
가득
while read file ; do
# do something with file
done < $(find . -type f -name *.txt)
하지만 그건 단 한 줄의 반환 : 처음에는 이상이 같은 될 것이라고 생각했다. IFS
에서 \n
으로 변경하는 것도 작동하지 않았습니다. 처음보다 훨씬 더 코드
tmpfile=$$.$(date +'%Y%m%d%k%M%S').tmp
find . -type f -name *.txt > $tmpfile
while read file ; do
# do something with file
done < $tmpfile ; rm $tmpfile
하지만 바로 느낌이없고, :
나의 현재 해결 방법은 내가 관심이있는 모든 파일과 임시 파일을 구축 한 후 잠시 사용 선택권. 누군가가 첫 번째 루프를 실행하는 올바른 방법을 말해 줄 수 있습니까?
감사합니다.
while IFS= read -r file ; do
# do something with file
done < <(find . -type f -name *.txt)
<()
프로세스 대체 기본적으로 당신은 동안 루프로 리디렉션 할 수있는 파일, 같은 역할 :
흠 .. 문서에서 말하는 내용과 정확히 같지만 터미널에서 '0403-057 구문 오류 :'('예상하지 않습니다.')가 ksh93에서 올바르게 작동합니까? (AIX 상자를 실행하고 있습니다.) – filippo
어머나 ..이 오래된 버전의 문제인 https://bugzilla.redhat.com/show_bug.cgi?id=572024가 sys 관리자에게 느껴졌을 수도 있습니다! – filippo