Linux에서 빈 파일과 디렉터리를 모두 재귀적으로 삭제하는 방법은 무엇입니까?

Linux에서 빈 파일과 디렉터리를 모두 재귀적으로 삭제하는 방법은 무엇입니까?

상위 디렉터리의 모든 빈 파일과 디렉터리를 재귀적으로 정리하는 방법은 무엇입니까?

다음과 같은 디렉터리 구조가 있다고 가정해 보겠습니다.

Parent/
  |____Child1/
        |______ file11.txt (empty)
        |______ Dir1/ (empty)

  |____Child2/
        |_______ file21.txt
        |_______ file22.txt (empty)

  |____ file1.txt

나는 이렇게 끝나야 한다:

Parent/
  |____Child2/
        |_______ file21.txt

  |____ file1.txt

답변1

다음은 매우 간단한 라이너입니다.

find Parent -empty -delete

이것은 꽤 자명합니다. 확인해보니 Parent/Child1이 성공적으로 삭제된 것에 놀랐습니다. 일반적으로 지정하지 않는 한 부모를 먼저 처리한 다음 자식을 처리할 것으로 예상합니다 -depth.

-delete이는 을 의미 하므로 유효합니다 -depth.GNU 찾기 매뉴얼:

-delete파일을 삭제합니다. 삭제에 성공하면 true입니다. 삭제에 실패하면 오류 메시지가 표시됩니다. -delete가 실패하면 find의 종료 상태는 0이 아닙니다(마지막으로 종료될 때). -delete를 사용하면 -deep 옵션이 자동으로 켜집니다.


이러한 기능은 다음의 일부가 아닙니다.POSIX 표준, 그러나 많은 Linux 배포판에 존재할 가능성이 높습니다. Alpine Linux와 같은 소규모 Linux에서는 특정 문제가 발생할 수 있습니다.바쁜 상자지원하지 않습니다 -empty.

다른 시스템에는 비표준 시스템이 포함되며 다음 -empty-delete포함됩니다 .BSD그리고OSX그러나 분명히 그렇지 않다AIX.

답변2

두 가지 명령을 사용한 솔루션은 다음과 같습니다.

빈 파일 삭제

find Parent/ -type f -size 0 -delete

삭제해 보세요모두목차

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null

NB는 rmdir비어 있지 않은 디렉토리를 삭제할 수 없으므로 실행해도 안전하지만 숨길 수 있는 오류가 발생합니다.

위와 같지만 무시된 오류 메시지에 대해 더 구체적입니다. 메시지가 릴리스마다 다를 경우 수정해야 할 수도 있습니다.

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
  | grep -iv "Directory not empty$"

답변3

fd이 도구를 사용하여 다음을 수행 할 수도 있습니다 .

fd -t e -x rm -r

https://github.com/sharkdp/fd

관련 정보