find -name을 xargs로 파이프하면 공백이있는 파일 이름이 명령에 전달되지 않습니다. 파일 이름에 공백이있는 파일을 제거하려면

일반적으로 파일 이름에 공백이있는 파일을 제거하려면 다음을 실행해야합니다.

$ rm "file name"

그러나 여러 파일을 제거하려면 다음과 같이하십시오.

$ find . -name "*.txt" | xargs rm

공백이있는 파일은 삭제되지 않습니다.



답변

널 종결자를 사용 find하고 말할 수 있습니다.xargs

find . -name "*.txt" -print0 | xargs -0 rm

또는 (더 간단하게) 내장 -delete조치를 사용하십시오.find

find . -name "*.txt" -delete

또는 (감사합니다 @kos)

find . -name "*.txt" -exec rm {} +

둘 중 하나가 ARG_MAX필요없이 시스템의 한계를 존중 해야합니다 xargs.


답변

또한 find 이외의 것을 사용하면 tr을 사용하여 개행을 널 바이트로 바꿀 수 있습니다.

예 : 다음 하나의 라이너는 이름에 공백이 있어도 디렉토리에서 마지막으로 수정 된 10 개의 파일을 삭제합니다.

ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm


답변

xargs 명령은 기본적으로 탭, 공백 및 줄 바꾸기를 구분 기호로 사용합니다. -d 옵션과 함께 개행 문자 ( ‘\ n’) 만 사용하도록 지정할 수 있습니다.

find . -name "*.txt" | xargs -d '\n' rm

SO에 대한 소스 답변 .


답변