많은 (200 000) 파일을 제거하는 방법?


17

폴더에서 200,000 개의 파일 (모두 파일)을 제거해야하며 폴더 자체를 삭제하고 싶지 않습니다.

rm을 사용하면 "인수 목록이 너무 깁니다"라는 오류가 발생합니다. xargs로 무언가를 시도했지만 Shell Guy가 아니므로 작동하지 않습니다.

find -name * | xargs rm -f

5
삭제 후 폴더를 삭제하고 다시 작성하지 않는 이유는 무엇입니까?
garconcn

답변:


35
$ find /path/to/folder -type f -delete

15
GNU find (대부분의 Linux 배포판에서 사용되는)는을 사용하여 파일을 스스로 삭제할 수 있다고 언급 할 가치가 있습니다 -delete. 이것은 또한 따옴표 또는 줄 바꿈 문자가 포함 된 파일의 문제를 피합니다 (GNU 찾기 -print0및 GNU xarg -0옵션을 사용하여 수정할 수 있음).
DerfK

3
@DerfK, 좋은 말! 또한, PPL이 많이 노는 경향이 xargs한편 find-exec command {} +구문을.
poige

5

당신은 모든 것을 올바르게하고 있습니다. 문제를 일으키는 것은 '*' 입니다 (쉘이 파일 대신 파일 목록으로 확장 find). 올바른 구문은 다음과 같습니다.

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(후자는 더 긴 이름을 전달하기 때문에 조금 덜 효율적 xargs이지만 :-) 거의 눈치 채지 못할 것입니다)

또는 다음 과 같이 '*'를 이스케이프 처리 할 수 ​​있습니다 (그러나이 경우 "."및 ".."도 제거하려고 시도하지만 큰 문제는 아닙니다-약간의 경고가 표시됩니다 :-)).

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

파일 이름에 공백이 있으면 다음을 사용하십시오.

find . -type f -print0 | xargs -0 rm -f

1
공백이 포함 된 파일 이름이 있으면 작동하지 않습니다.
user9517가 지원함 GoFundMonica

@lain : 예, 난 그냥 공백에 대한 트릭을 포함하도록 내 답변을 편집하는 과정에 있었다 :-)
dtoubelis

3

다음 명령은 현재 디렉토리 에서 모든 파일을 삭제합니다 .

find . -type f -exec rm {} \;

2
-name '*'"모든 파일"을 의미하지는 않습니다. 파일은 다음과 같이 말합니다 :-type f
poige

2

당신은 시도 할 수 있습니다

find /path/to/folder -type f -print0  | xargs -0 rm -f

또는

find /path/to/folder -type f -exec rm -f "{}" +

1

퀀 타즈에게 해답을 구하는 방법은 다음과 같습니다.

특정 이름 패턴을 가진 파일을 삭제하려면 다음과 같이 작성할 수 있습니다. 또한 -print를 추가하여 파일이 삭제 될 때 발생하는 상황을 확인할 수 있습니다.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

예를 들어 이것은 mydirectory의 모든 jpeg를 삭제합니다.

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