상위 디렉터리의 모든 빈 파일과 디렉터리를 재귀적으로 정리하는 방법은 무엇입니까?
다음과 같은 디렉터리 구조가 있다고 가정해 보겠습니다.
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$"