(해결됨) -bash:/bin/mv: 인수 목록이 너무 깁니다.

(해결됨) -bash:/bin/mv: 인수 목록이 너무 깁니다.

2022-10-18 last update

4 minutes reading find shell xargs command
내 개발 서버 중 하나에는 단일 디렉토리 아래에 수백만 개의 파일이 있습니다. 디스크 공간을 확보하기 위해 동일한 시스템에 연결된 다른 디스크에 생성된 새 폴더로 이동하기로 결정했습니다. mv 명령으로 파일을 이동하려고 하면 다음 오류가 발생했습니다.

-bash: /bin/mv: Argument list too long

"인수 목록이 너무 깁니다"오류는 일반적으로 단일 명령에 많은 수의 매개변수를 전달할 때 발생합니다. 시스템 변수 ARG_MAX는 쉘 명령에서 인수의 최대 문자 길이를 정의합니다.

해결책

빠른 해결책은 xargs 명령줄 유틸리티를 사용하거나 -exec … {}로 명령을 찾는 것입니다. 두 명령 모두 큰 명령을 작게 나누고 오류 없이 작업을 완료합니다.(vitag.Init = window.vitag.Init || []).push(function(){viAPItag.display("vi_1879779679")})
  • xargs와 함께 찾기 사용 – 다음 명령은 확장자가 .txt인 모든 파일을 대상 디렉토리로 이동합니다.
    find . -name '*.txt' | xargs mv --target-directory=/path/to/dest_dir/ 
    
  • exec와 함께 찾기 사용 – exec를 사용하여 동일한 작업을 수행할 수도 있습니다.
    find . -name '*.txt' -exec mv {} /path/to/dest_dir/ \;
    
    위의 기본 명령은 하위 디렉터리로 재귀적으로 탐색합니다. 찾기를 현재 디렉토리로만 제한하려면 -maxdepth 다음에 하위 디렉토리로 제한 번호를 사용하십시오.
    find . -name '*.txt' -maxdepth 1 -exec mv {} /path/to/dest_dir/ \;
    
  • 쉘에서 명령getconf ARG_MAX으로 최대 한계를 찾을 수 있습니다.(vitag.Init = window.vitag.Init || []).push(function(){viAPItag.display("vi_1879779679") })