파일 이름에 공백이있는 리눅스에서 여러 파일 삭제


1

Linux 상자에 10000 개 이상의 파일을 삭제해야하는 디렉토리가 있습니다. 달리는...

sudo rm -rf /var/tmp/*

오류 메시지를 제공합니다 ...

sudo: unable to execute /bin/rm: Argument list too long

이것에 대한 해결책은 실행하는 것입니다

sudo find /var/tmp | xargs sudo rm

파일 이름에 공백이없는 파일에만 작동합니다. 그러나 일부 파일에는 공백이 포함 된 이름이 있으며 삭제되지 않습니다. 예를 들어, 파일 이름이 'Name.dat에 공백이있는 파일'인 경우 명령을 실행하면 다음과 같은 오류가 발생합니다 ....

rm: cannot remove `/var/tmp/A': No such file or directory
rm: cannot remove `File': No such file or directory
rm: cannot remove `With': No such file or directory
rm: cannot remove `Spaces': No such file or directory
rm: cannot remove `in': No such file or directory
rm: cannot remove `the': No such file or directory
rm: cannot remove `Name.dat': No such file or directory

파일 이름을 손상시키지 않고 전체 파일 경로를 xargs sudo rm에 전달하는 방법

답변:


6

에게 findxargs다른 파일 구분 기호를 사용할 수 :

find /var/tmp -print0 | sudo xargs -0 rm

또는 직접 find실행하도록 지시하십시오 rm.

sudo find /var/tmp -exec rm {} +

또는 find파일을 삭제하도록 지시하십시오.

sudo find /var/tmp -delete

참고 : 디렉토리 자체를 -mindepth 1삭제하지 않으려면 유용 할 수 있습니다 /var/tmp.

... 또는 실제로을 삭제하십시오 *. 처음에 재귀 모드를 사용하려는 경우 필요하지 않습니다.

sudo rm -rf /var/tmp

@raido : 업데이트에 유의하십시오.
grawity

1
세부 사항입니다. 피하기 전에 각각 sudo rm실행 sudo해야 한다면 속도가 훨씬 느려질 것이다 rm. 대신 루트 콘솔에서 명령을 실행하십시오.
fmanco 2016 년

@ criziot : 그것은 훨씬 느려서는 안되며 xargs, -exec +양식은 rm전체 파일 톤에 대해 한 번만 실행 됩니다. 하나는 여전히 그것을 바꿀 수 sudo xargssudo find문제를 방지 할 수 있습니다.
grawity

@ grawity : 나는 -exec +양식을 보지 못했습니다 . 사실 나는 그것이 존재한다는 것을 알지 못했습니다. 그러나 당신은 분명히 맞습니다. 감사합니다
fmanco

1

디렉토리 삭제 문제를 피하기 위해 이전 답변에 추가하십시오.

find /var/tmp -type f -exec sudo rm {} +

find /var/tmp -depth -type d -exec sudo rmdir {} +

rmdir -p -depth를 사용하는 대신 디렉토리의 모든 하위 항목을 제거하는 데 사용할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.