sh: /bin/ls: The parameter list is too long.

jee89의 이미지

sh /bin/ls The parameter list is too long.
에러가 발생하는데요.
이걸 피할수 있는 방법이 있나요?

ls -1 AA*|egrep -v '(INFO|dup|txt|row|col)'|sort -t . -k 2,4

를 popen으로 "r" 모드를 열어서 파일을 처리하려고 하는데요.
파일이 작업 디렉토리에 엄청많습니다.

그냥 shell에서 ls -1 AA*|wc -l 해보니깐
동일한 에러가 발생하네요.
wc cannot open -
wc cannot open l
0 0 0 total
sh /bin/ls The parameter list is too long.

고치려면.. 어케하면되나요?

mithrandir의 이미지

find -maxdepth 1
이 ls -1 과 거의 비슷한 결과를 보여줄겁니다.
AA* 라면,

find -name 'AA*' 겠지요.

다만 AA* 에 디렉토리가 있다면, -maxdepth 를 좀 바꿔줘야 할겁니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

pynoos의 이미지

find 를 사용하시면 됩니다.

Quote:
sh: /bin/ls: The parameter list is too long.

이렇게 에러가 나는 이유는 AA* 에 매치 되는 파일들을 현재 shell이 일단 찾아서 ls에 넘기기 때문입니다.

ls *

라고 하면 ls 가 현재 디렉토리를 뒤져가며 모든 파일을 보여주는 것이 아니라 shell이 찾아서 넘기기 때문입니다.

원리를 알면 비슷한 문제에 봉착했을 때 shell이 하는 짓인지 util이 하는 짓인지를 알 수가 있습니다.

find . -name "*" -print

이런 식으로 하면 find가 현재 디렉토리에서 찾아서 보여주지요.

jee89의 이미지

find로 search하면 서브디렉토리를 타던데
현재디렉토리만 검색대상으로 하는 옵션이 있나요?

jee89의 이미지

^^
find . -name AA*|egrep -v '(INFO|dup|txt|row|col)'|sort -t . -k 2,4

하니깐,
sh: /bin/find: The parameter list is too long.
동일한 상황이 발생하는군요....
ㅠㅠ

progcom의 이미지

find . -name 'AA*' 와 find . -name AA* 은 전혀 다른 결과를 가져옵니다.... ;;;;