많은 수의 하위 폴더가 포함된 폴더를 빠르게 삭제하는 방법은 무엇입니까? [복사]

많은 수의 하위 폴더가 포함된 폴더를 빠르게 삭제하는 방법은 무엇입니까? [복사]

266778개의 하위 폴더가 있는 폴더가 있습니다. 어떻게 삭제할 수 있나요?

나는 열심히 노력했다

cd ~/.local/share/Trash/
sudo rm -rf *

하지만 시간이 많이 걸립니다. 실제 시간 1분 25초, 사용자 시간 0.072초가 지나자 폴더 2500개만 삭제됐다. 결과적으로 폴더를 삭제하는 데 2시간 이상이 소요됩니다.

이 폴더를 삭제하는 더 빠른 방법이 있습니까? 사용자 시간과 실시간 사이에 왜 그렇게 큰 차이가 있습니까?

real    1m25.474s
user    0m0.072s
sys     0m28.142s

저는 Linux 2.6.32(Ubuntu 10.04.4 LTS)를 사용하고 있습니다.

답변1

그것은 당신의 정의에 달려 있습니다빠르게. 실제로 파일 시스템에서 디렉터리를 삭제하기 위한 좋은 솔루션이 여기에 이미 제공되어 있지만 실제로 필요한 것이 디렉터리를 해제하는 것이라면이름가능한 한 빨리 동일한 파일 시스템에서 이름 바꾸기가 즉시 이루어집니다.

{ mv directory directory.gone && rm -rf directory.gone; } &

기술적으로 이것은 실제 삭제 속도를 높이지 않기 때문에 부정 행위이지만 실제로는 매우 유용합니다. 저는 이 트릭을 항상 사용하므로 느린 삭제를 기다릴 필요가 없습니다.

답변2

귀하의 "find" 버전이 -delete 하위 명령을 구현하는 경우 시도해 볼 수 있습니다.

find directory -delete

이 경우:

find ~/.local/share/Trash/ -delete

rm과 같은 일부 명령은 대부분의 작업을 커널에서 수행합니다. 정확하게는 파일 시스템 루틴입니다. 시스템 호출을 실행하는 데 걸리는 시간은 이런 방식으로 계산됩니다. 따라서 "rm" 명령이 오랫동안 실행되더라도 사용자 모드에서는 많은 작업을 수행하지 않습니다. 즉 시스템 호출이 대부분의 작업을 수행합니다.

답변3

rm -rf directory또는 rm -rf *로컬 rm구현이 중단되지 않는 한 가장 빠른 방법입니다.

를 사용해도 find아무런 이점이 없습니다 .

빠른지 느린지는 주로 파일 시스템과 운영 체제 구현에 따라 다릅니다. 그래서 이 질문은 부적절해 보입니다.

Solaris의 UFS 및 ZFS는 이러한 작업을 수행하는 데 매우 빠른 것으로 알려져 있습니다. 두 파일 시스템 구현 모두 지연된 백그라운드 삭제 코드를 포함하여 unlink()문제의 객체에 총 시간이 더 걸리더라도 빠른 반환을 유발하고 호출하기 때문입니다.rmdir()

커널의 지연된 백그라운드 삭제를 통해 디렉터리 업데이트도 빠르게 완료되므로 전체 작업 속도가 빨라집니다.

답변4

기다리지 않고 가동 중지 시간을 피하고 싶거나 폴더를 빨리 삭제해야 하는 경우 mv다음 재부팅 시 삭제를 대기열에 추가하세요. 또한 mv파일 작업은 항상 다른 작업보다 빠르며 파일 IO 작업 차단을 기다리거나 해당 폴더에서 현재 수행 중인 작업을 계속할 필요가 없습니다.

오직 mv folder_to_be_deleted /tmp/folder_queue_for_deletion. /tmp 디렉터리의 파일은 다음 재부팅 시 삭제됩니다.

기준:

$ cat make_million_files.sh
#!/usr/bin/env bash

mkdir folder_to_be_deleted
for i in $(seq 0 1000000); do
  touch folder_to_be_deleted/$i;
done
$ ./make_million_files.sh
real    66m3.613s
user    5m47.507s
sys     61m15.432s

IO 차단 작업

$ rm -rf folder_to_be_deleted
real    0m32.451s
user    0m2.086s
sys     0m25.094s

비 IO 차단 작업(다음 재부팅 시 대기열이 삭제됨)

$ mv folder_to_be_deleted /tmp/folder_queue_for_deletion
real    0m0.012s
user    0m0.001s
sys     0m0.010s

기본적으로, 다수의 하위 폴더가 포함된 여러 폴더가 있고 가동 중지 시간 없이 해당 폴더를 신속하게 삭제하려는 경우 이점은 분명하며 이 솔루션은 다수의 하위 폴더가 포함된 백만 개의 폴더를 삭제하는 데 60초 밖에 걸리지 않는다고 생각할 수 있습니다. 하위 폴더.

하위 폴더 수가 많은 1000개 폴더의 경우 IO 차단 시 약 1시간, IO 차단 시 약 rm -rf12초가 소요됩니다 mv. 모든 것을 삭제하려면 부팅하는 데 60초밖에 걸리지 않습니다. 마지막으로 다시 시작하고 싶지 않은 경우 mv폴더를 이동하여 rm -rf다른 위치(다른 TTY 세션 등)에 넣으면 됩니다.

관련 정보