it-swarm.dev

홈 디렉토리에서 빈 디렉토리를 재귀 적으로 삭제하려면 어떻게해야합니까?

가능한 중복 :
하위 트리에서 모든 빈 디렉토리를 제거하는 방법?

홈 디렉토리 위에 흩어져있는 디렉토리를 매우 자주 만들고, 찾아서 삭제하기가 매우 어렵다는 것을 알게되었습니다.

별명/함수/스크립트가 홈 디렉토리의 모든 빈 디렉토리를 찾거나 찾아서 삭제하기를 원합니다.

158
Santosh Kumar

find 명령은 재귀 파일 시스템 조작을위한 기본 도구입니다. 사용 -type d 표현식은 find에게 디렉토리만을 찾는데 관심이 있습니다 (일반 파일은 아님). find의 GNU 버전은 -empty 테스트이므로

$ find . -type d -empty -print

현재 디렉토리 아래에 모든 빈 디렉토리를 인쇄합니다.

사용하다 find ~ -… 또는 find "$HOME" -… 홈 디렉토리 (현재 디렉토리가 아닌 경우)를 기준으로 검색합니다.

이것이 올바른 디렉토리를 선택하고 있음을 확인한 후 -delete 모든 일치 항목을 삭제하려면 다음을 수행하십시오.

$ find . -type d -empty -delete
310
Baldrick

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
15
jordanm