태그 보관물: shell

shell

빈 디렉토리 트리를 제거하십시오 (가능한 한 많은 디렉토리를 제거하지만 파일은 제거하지 마십시오) 디렉토리 트리를 삭제할 수

다음과 같은 디렉토리가 있다고 가정하십시오.

ROOTDIR
    └--SUBDIR1
        └----SUBDIR2
            └----SUBDIR3

입력 할 때 다음과 같은 명령을 찾고 있습니다.

$ [unknown command] ROOTDIR

파일이없고 전체 트리 안에 디렉토리 만 있으면 전체 디렉토리 트리를 삭제할 수 있습니다 . 그러나 SUBDIR1 아래에 hello.pdf라는 파일이 있다고 가정하십시오.

ROOTDIR
    └--SUBDIR1
        └--hello.pdf
        └----SUBDIR2
            └----SUBDIR3

그런 다음 명령은 SUBDIR2 이하 만 삭제해야합니다.



답변

알렉시스가 가까워 당신이해야 할 일은 이것입니다 :

find . -type d -depth -empty -exec rmdir "{}" \;

먼저 첫 번째 빈 디렉토리를 찾을 때까지 디렉토리 트리를 드릴 다운 한 다음 삭제합니다. 따라서 부모 디렉토리를 비우면 삭제 될 것입니다. 이것은 원하는 효과를 낼 것입니다 (일주일에 10 번 정도 할 것이므로 옳습니다). 🙂


답변

find ROOTDIR -type d -empty -delete

와 동일

find ROOTDIR -type d -depth -empty -exec rmdir "{}" \;

내장 된 “-delete”조치를 사용합니다.

“-delete”는 “-depth”를 의미합니다.


답변

나는 이것을 시도 할 것이다 :

find ROOTDIR -type d -depth -exec rmdir {} \;

답변

안전하게 수행하기 전에 몇 가지 요구 사항이 있습니다.

  1. 하위 디렉토리를 먼저 제거한 다음 상위 디렉토리를 제거하십시오. 즉, 디렉토리 목록을 정렬하거나 rmdir –parents 플래그를 사용해야합니다.
  2. -로 시작하는 파일로 인한 놀라움을 피하려면 항상 / 또는 ./로 ROOTDIR을 시작하십시오.
  3. 공백이있는 디렉토리 이름으로 작업하려면 NUL 종료 디렉토리 목록을 사용하십시오.

다음은 셸에서 수행하는 방법입니다.

find ./ROOTDIR -type d | sort -r | tr '\n' '\000' | xargs -0 rmdir --ignore-fail-on-non-empty

중복 오류가 마음에 들지 않으면 부모와 함께 모든 디렉토리를 강제로 제거하고 정렬 할 필요가 없습니다 (tr에 추가 해야하는 NUL 종료 문자열을 정렬 할 수 없음)

find ./ROOTDIR -type d -print0 | xargs -0 rmdir --ignore-fail-on-non-empty --parents

답변

rmdir $(find ROOTDIR -type d | sort -r)

답변

나는 이것을 할 것이다 :

find ROOTDIR -type d | xargs -0 -I {} rmdir {}

답변