작성한 내용은 개행으로 구분 된 파일 이름 (및 경로) 목록을 (으)로 rm
보내지 만 rm은 해당 입력으로 수행 할 작업을 모릅니다. 명령 줄 매개 변수 만 기대하고 있습니다.
xargs
일반적으로 줄 바꿈으로 구분 된 입력을 받아 명령 줄에 배치하므로 xargs를 추가하면 작업 한 내용이 만들어집니다.
find . -name .svn | xargs rm -fr
xargs
rm
받아 들일 수있는 만큼만 많은 인수를 전달할 정도로 지능적 입니다. 따라서 백만 개의 파일이있는 경우 rm
1,000,000 / 65,000 회 실행될 수 있습니다 (쉘이 명령 행 {65k 파일 + 1-rm의 경우 +--fr의 경우 65,002 개의 인수를 승인 할 수있는 경우).
사람들이 적절하게 지적했듯이 다음도 작동합니다.
find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf
처음 두 -exec
양식은 모두 rm
삭제되는 각 폴더를 호출 하므로 1,000,000 개의 폴더 rm
가있는 경우 1,000,000 번 호출됩니다. 이것은 확실히 이상적이지 않습니다. 최신 구현을 rm
통해 가능한 많은 인수를 허용 +
한다는 표시로 명령을 완료 할 수 rm
있습니다.
find . -name .svn -exec rm -rf {} +
마지막 find / xargs 버전은 print0을 사용하므로 find \0
는 개행 문자가 아닌 종료 자로 사용 되는 출력을 생성합니다 . POSIX 시스템 \0
은 파일 이름을 제외한 모든 문자를 허용하므로 인수가 올바르게 전달 rm
되거나 응용 프로그램에 전달되도록하는 가장 안전한 방법 입니다.
또한 기본 디렉토리가 아니라 파일을 찾은 디렉토리에서 -execdir
실행 rm
되고 -depth
깊이가 먼저 시작 되는 a 가 있습니다.