rm -r을 사용하여 재귀적으로 삭제하는 방법은 무엇입니까? 어떤 순서로?

rm -r을 사용하여 재귀적으로 삭제하는 방법은 무엇입니까? 어떤 순서로?

작업 순서가 있나요 rm? 저는 rm큰 디렉터리에 대한 작업을 수행하고 있는데 삭제되었을 수 있는 콘텐츠를 어디에서 찾아야 하는지 궁금합니다. rm먼저 파일에서 작동하고 그 다음 디렉터리에서 작동 합니까 ? 아니면 inode 테이블의 일부 정보를 기반으로 합니까?

사양: GNU coreutils 8.22 시스템의 rm: USB 2.0을 사용하여 beagleboneblack 파일 시스템 외부 Seagate HDD(ext4)에서 실행되는 Arch Linux.

배경 이야기:

디렉토리 정리 및 실행 중입니다.

cp -r A/ B/ C/ Dest/

나도 모르게 따라가게 됐어

rm -r A/ B/ C/ Dest/

그냥 단순한 퍼포먼스를 하고 싶을 때

rm -r A/ B/ C/

나는 이것을 발견하고 Ctrl곧 +를 클릭했습니다. 구체적으로는 & 와 명령어를 조합했기 때문에 C시간이 3초도 안 걸렸습니다. 없는 줄 알고 들어가 봤는데, 그런데 보니 완전하고,timermcpDest/등장영향을 받지 않도록. A/ B/ C/너무 작아서 좀 놀랍네요 . 총 크기는 100~200MB일 수 있습니다. Dest/하지만 1TB에 조금 못 미치는 수준이다. Dest/를 실행하면 ls알파벳 양쪽 끝에 파일과 디렉터리가 있음을 알 수 있습니다(예 AFile.txt: ... Zoo.txt).

운이 좋아서 rmDest/ 디렉토리에 큰 피해를 입히기 전에 취소했나요? 정말 그렇게 느린가요 rm(맙소사!)?

rm그렇지 않은 경우 누락된 항목을 추측할 수 있도록 재귀적으로 항목을 제거하려면 어떻게 해야 합니까 ?

나는 잃어버린 것을 되찾는 것을 별로 기대하지 않고, 단지 무엇이 날아갔을지 궁금할 뿐입니다.

답변1

rm -r각 매개변수는 차례로 처리됩니다. 인수가 디렉터리인 경우 디렉터리를 나열합니다(opendir그리고readdir함수 또는 이와 동등한 방법) 각 항목에 대해 차례로 작동합니다. 항목이 디렉터리인 경우 해당 항목을 재귀적으로 탐색합니다.

이는 다른 응용 프로그램에서 디렉토리 등 을 재귀적으로 탐색하는 데 사용되는 것과 정확히 동일한 방법입니다 find.ls -Rf

순회 순서는 예측할 수 없습니다. 대부분의 파일 시스템에서는 디렉토리에 파일을 추가하거나 제거하거나 이름을 바꾸지 않는 한 순서를 재현할 수 있습니다(이론적으로 순서는 완전히 무작위이고 매번 변경될 수 있지만 다음과 같은 파일 시스템은 생각할 수 없습니다). 이런 일이 일어날 것입니다). 일부 파일 시스템에서는 일반적으로 파일 이름이나 파일이 생성된 순서 또는 둘의 조합으로 순서를 유추할 수 있지만 파일 시스템의 세부 사항을 알아야 하며 드라이버에 따라 다를 수 있습니다. 버전. 순회 순서는 신뢰할 수 있는 것이 아닙니다.

파일 이름을 기준으로 사전순으로 파일을 기록하거나 정렬 합니다 ls. 정렬되지 않았습니다 .echo *findls -f

믿을 수 있는 한 가지는 매개변수가 순차적으로 처리된다는 것입니다. 따라서 여전히 부분적으로 존재한다면 영향을 받지 않았다는 C/의미입니다 . Dest/사라지면 C/디렉터리 수정 시간을 확인하고 삭제 시간이나 복사 종료 시간과 비교하면 파일이 삭제된 위치를 알 수 있습니다. 삭제될 첫 번째 파일은 탐색되는 첫 번째 항목이 디렉터리인지 여부에 따라 계층 구조에 직접 있는 파일일 수도 있고 계층 구조 깊은 곳에 있는 파일일 수도 있습니다.Dest/C/Dest/Dest/rm

속도는 rm주로 삭제할 파일 수에 따라 달라집니다. 매우 큰 파일은 삭제 시간에만 큰 영향을 미칩니다. 대부분의 작업은 각 디렉토리 항목을 차례로 삭제하는 것입니다. 파일의 데이터는 삭제되지 않습니다. 파일의 내용을 삭제하면 사용 중인 블록이 무료로 표시되므로 비교적 빠릅니다.

답변2

Gilles가 말했듯이 일반적으로 디렉터리 내 삭제 순서를 예측할 수 없으며 최상위 디렉터리만 명령줄의 순서대로 처리됩니다.

그러나 Unix에서는 빈 디렉터리만 삭제할 수 있으므로 디렉터리 계층 구조가 아래에서 위로 삭제된다는 점을 보장할 수도 있습니다. 따라서 디렉토리를 삭제하려면 먼저 그 안에 있는 모든 내용을 삭제해야 합니다. 하위 디렉터리가 포함된 경우 해당 콘텐츠를 먼저 삭제해야 합니다.

관련 정보