-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

repoin 의 복사본을 만들려면 다음을 backup_repo사용하세요 rsync.

rsync -a repo/ backup_repo

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

tar -c -f repo.tar repo

*inside 로 확장되는 보이는 이름만 복사 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.

관련 정보