홈 디렉토리의 빈 디렉토리를 재귀적으로 삭제하는 방법은 무엇입니까? [복사]

홈 디렉토리의 빈 디렉토리를 재귀적으로 삭제하는 방법은 무엇입니까? [복사]

중복 가능성:
하위 트리에서 빈 디렉터리를 모두 제거하는 방법은 무엇입니까?

나는 홈 디렉토리 전체에 흩어져 있는 디렉토리를 자주 생성하는데, 이를 찾아서 삭제하는 것이 어렵습니다.

내 홈 디렉터리의 모든 빈 디렉터리를 찾아서 제거하려면 별칭/함수/스크립트를 사용하고 싶습니다.

답변1

find명령은 재귀적 파일 시스템 작업을 위한 기본 도구입니다. 표현식을 사용하여 (일반 파일이 아닌) 디렉터리를 찾는 데에만 관심이 있음 -type d을 알립니다 . findGNU 버전은 테스트를 find지원하므로-empty

$ find . -type d -empty -print

현재 디렉토리 아래의 모든 빈 디렉토리가 인쇄됩니다.

현재 디렉토리가 아닌 경우 홈 디렉토리를 사용하거나 find ~ -…이를 기반으로 검색하십시오.find "$HOME" -…

올바른 디렉토리가 선택되었는지 확인한 후 -delete다음을 사용하여 일치하는 모든 항목을 제거하십시오.

$ find . -type d -empty -delete

답변2

빈 디렉터리만 제거되므로 rmdir디렉터리별로 이를 호출할 수 있습니다 .rmdir

find "$HOME" -type d -exec rmdir {} + 2>/dev/null

삭제되는 디렉토리도 인쇄하려면 해당 디렉토리가 비어 있는지 확인해야 합니다.

find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \; 

다음은 순수한 bash 예입니다(버전 4 이상).

shopt -s globstar
for dir in **/; do
   files=("$dir"/*)
   [[ ${files[@]} ]] || rmdir -v "$dir"
done

관련 정보