저는 수십억 개의 파일이 모두 JPEG 파일 형식으로 포함된 30TB 디렉토리를 가지고 있습니다. 다음과 같이 각 폴더의 파일을 삭제합니다.
sudo rm -rf bolands-mills-mhcptz
명령이 실행되고 작동 여부에 관계없이 아무 것도 표시되지 않습니다.
파일을 삭제하는 것인지, 명령의 현재 상태가 어떤 것인지 알고 싶습니다.
답변1
삭제된 각 파일에 대해 한 줄씩 rm -v
인쇄 할 수 있습니다 rm
. 이렇게 하면 rm
파일 삭제가 실제로 작동했음을 확인할 수 있습니다 . 그러나 수십억 개의 파일이 있는 경우에는 rm
해당 파일이 여전히 작동하고 있다는 것만 볼 수 있습니다 . 얼마나 많은 파일이 삭제되었는지, 얼마나 남았는지 알 수 없습니다.
이 도구는 pv
진행 상황을 예측하는 데 도움이 될 수 있습니다.
http://www.ivarch.com/programs/pv.shtml
rm
샘플 출력을 사용하여 호출하는 방법은 다음과 같습니다.pv
$ rm -rv dirname | pv -l -s 1000 > logfile
562 0:00:07 [79,8 /s] [====================> ] 56% ETA 0:00:05
pv
이 인위적인 예에서는 파일이 있다고 말했습니다 1000
. 출력에는 pv
562가 삭제되었으며 경과 시간은 7초, 예상 완료 시간은 5초가 표시됩니다.
몇 가지 설명:
pv -l
pv
바이트 대신 개행 문자로 계산pv -s number
pv
총액이 얼마인지 알려 주시면 견적을 받아보실 수 있습니다.logfile
최종 리디렉션은 깔끔한 출력을 위한 것입니다. 그렇지 않으면 상태 줄이pv
의 출력과 혼동됩니다rm -v
. 보너스: 삭제 내용에 대한 로그 파일이 제공됩니다. 하지만 파일이 매우 커질 수 있다는 점에 유의하세요./dev/null
로그가 필요하지 않은 경우 리디렉션할 수도 있습니다.
파일 수를 얻으려면 다음 명령을 사용할 수 있습니다.
$ find dirname | wc -l
수십억 개의 파일이 있는 경우에도 시간이 오래 걸릴 수 있습니다. pv
여기에서 얼마나 많이 계산되었는지 확인할 수도 있습니다 .
$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [ <=> ]
278044
여기서는 278k개의 파일을 계산하는데 4초가 걸렸다고 합니다. () 끝에 있는 정확한 개수는 278044
의 출력입니다 wc -l
.
카운트를 기다리지 않으려면 파일 수를 추측하거나 pv
직접 사용할 수 있습니다.
$ rm -rv dirname | pv -l > logfile
이렇게 하면 달성하려는 작업을 추정할 수 없지만 최소한 삭제된 파일 수는 확인할 수 있습니다. /dev/null
로그 파일이 필요하지 않은 경우 로 리디렉션하세요.
잔소리:
- 정말로 필요합니까
sudo
? - 일반적
rm -r
으로 재귀적으로 삭제하면 충분합니다. 불필요한rm -f
.
답변2
확인하다레스마나의 답변, 그것은 내 것보다 훨씬 낫습니다. 특히 pv
대신 지정하면 원시 침묵보다 훨씬 오래 걸리지 않는 마지막 예입니다.rm
/dev/null
logfile
해당 옵션을 지원한다고 가정하면 rm
(Linux를 실행하고 있기 때문에 지원하게 될 것입니다) 다음을 사용하여 상세 모드에서 실행할 수 있습니다 -v
.
sudo rm -rfv bolands-mills-mhcptz
많은 논평자들이 지적했듯이, 터미널에서 생성되고 표시되는 출력량이 많기 때문에 속도가 매우 느릴 수 있습니다. 출력을 파일로 리디렉션할 수 있습니다.
sudo rm -rfv bolands-mills-mhcptz > rm-trace.txt
그리고 크기를 관찰해 보세요 rm-trace.txt
.
답변3
또 다른 옵션은 파일 시스템의 파일 수가 감소하는 것을 관찰하는 것입니다. 다른 터미널에서 다음을 실행합니다.
watch df -ih pathname
rm
진행됨에 따라 사용되는 inode 수가 감소합니다. (예를 들어 트리가 cp -al
. 이는 여러 파일(및 디렉터리)의 삭제 진행 상황을 추적합니다. 사용된 공간은 추적되지 df
않습니다 .-i
또한 실행 iostat -x 4
하여 초당 I/O 작업(및 kiB/s, 그러나 이는 순수 메타데이터 I/O와 관련성이 낮음)을 볼 수도 있습니다.
rm
현재 처리 중인 파일이 무엇인지 궁금하다면 해당 파일에 첨부하여 터미널에 시스템 호출이 나타나는지 strace
확인 (및 getdents)할 수 있습니다. unlink()
예를 들어 sudo strace -p $(pidof rm)
. ^c
strace를 중단하지 않고 분리할 수 있습니다.rm
rm -r
삭제하려는 트리로 디렉토리를 변경했는지 잊어버렸습니다 . 그렇다면 살펴보세요 /proc/<PID>/cwd
. 종종 fd 디렉터리를 열 수 있으므로 해당 디렉터리를 조사하여 현재 프로세스가 무엇을 보고 있는지 /proc/<PID>/fd
확인할 수 있습니다 .rm
답변4
당신이 할 수 있는 한 가지는 백그라운드에서 프로세스를 시작한 다음 (출력이 없으므로 속도가 느려지지 않음) rm
간단한 (a) 명령을 사용하여 포그라운드에서 모니터링하는 것입니다 .
pax> ( D=/path/to/dir ; rm -rf $D & while true ; do
...> if [[ -d $D ]] ; then
...> echo "$(find $D | wc -l) items left"
...> else
...> echo "No items left"
...> break
...> fi
...> sleep 5
...> done )
27912 items left
224 items left
No items left
pax> _
콤보 find/wc
는 필요한 단위를 제공하는 어떤 도구로든 교체할 수 있습니다.
(우물 ,비교적핵물리학, 리만 가설, 또는 크리스마스에 아내에게 무엇을 사줄지에 비해 간단합니다 :-)