ls -d "$PWD"/* 명령을 실행할 때 매개변수 목록이 너무 깁니다.

ls -d "$PWD"/* 명령을 실행할 때 매개변수 목록이 너무 깁니다.

실행하려고 하는데

ls -d "$PWD"/* > formmlFileList43k.list

하지만 다음과 같은 오류가 발생합니다.

bash: /bin/ls: Argument list too long

파이프를 사용하면 그러한 제한이 없다는 것을 읽었습니다. 파이프를 사용하여 동일한 작업을 어떻게 수행할 수 있습니까?

ls -d "$PWD"/* > formmlFileList43k.list

어떤 도움이라도 대단히 감사하겠습니다.

답변1

디렉토리에 항목이 너무 많습니다. 이로 인해 쉘이 *ARG_MAX 바이트를 초과하는 명령줄 인수로 확장됩니다.

$ grep ARG_MAX /usr/include/linux/limits.h
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */

find다음 해결 방법을 사용하는 것이 좋습니다 .

$ find "${PWD}" -mindepth 1 -maxdepth 1 > formmlFileList43k.list

편집하다:@hagello는 점으로 시작하는 파일 이름에 대한 중요한 메모를 작성했습니다. 이러한 파일은 find출력에서 ​​제외되어야 합니다. 따라서 올바른 해결책은 다음과 같습니다.

$ find "${PWD}" -mindepth 1 -maxdepth 1 '!' -name '.*' > formmlFileList43k.list

관련 정보