2012-05-14 2 views
0

때때로 디렉토리의 모든 파일을 반복하여 무언가를 찾고 일반적으로 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) 

<() 프로세스 대체 기본적으로 당신은 동안 루프로 리디렉션 할 수있는 파일, 같은 역할 :

답변

1

당신은이 상황에서 프로세스 대체하지 명령 대체가 필요합니다.

+0

흠 .. 문서에서 말하는 내용과 정확히 같지만 터미널에서 '0403-057 구문 오류 :'('예상하지 않습니다.')가 ksh93에서 올바르게 작동합니까? (AIX 상자를 실행하고 있습니다.) – filippo

+0

어머나 ..이 오래된 버전의 문제인 https://bugzilla.redhat.com/show_bug.cgi?id=572024가 sys 관리자에게 느껴졌을 수도 있습니다! – filippo