-bash: /usr/bin/ls: 매개변수 목록이 너무 깁니다.

-bash: /usr/bin/ls: 매개변수 목록이 너무 깁니다.

이 명령을 사용하면 ls repo/* | xargs -I {} cp {} backup_repo/오류가 발생합니다 -bash: /usr/bin/ls: Argument list too long. 나는 이것이 일어나는 이유가 bash가 실제로 일치하는 각 파일에 별표를 확장하여 매우 긴 명령줄을 생성하기 때문이라는 것을 알고 있습니다. 이 오류를 어떻게 해결할 수 있나요?

답변1

xargs --show-limits </dev/null현재 한도를 보는 데 사용됩니다 .

더 좋은 방법:

find repo -maxdepth 1 -type f -name '*' -print0 | \
  xargs -0 --no-run-if-empty  \
    cp --target-directory=./backup_repro/

백업하려는 파일과 동일한 디렉터리에 백업 디렉터리를 두는 것은 좋지 않습니다. 다음을 포함하는 백업이 포함된 백업이 생성될 수 있으며 백업 크기는 무한대에 가까워질 수 있습니다.

읽다 man find xargs cp.

답변2

repo에 복사하려면 다음을 backup_repo사용하십시오 rsync.

rsync -a repo/ backup_repo

또는 백업만 필요한 경우 아카이브를 만드세요 tar.

tar -c -f repo.tar repo

*내부에서 확장되는 보이는 이름만 복사 repo하고 숨겨진 이름(예 .git: )을 건너뛰려면 다음을 사용할 수 있습니다.

printf '%s\0' repo/* | xargs -0 -I {} cp -R -- {} backup_repo

또는 GNU를 가정하면 cp,

printf '%s\0' repo/* | xargs -0 cp -t backup_repo -R --

printf유틸리티는 쉘에 내장되어 있으므로 bash매개변수 목록 크기에 대해 외부 유틸리티와 동일한 제한이 없습니다 ls.

관련 정보