![홈 디렉토리의 빈 디렉토리를 재귀적으로 삭제하는 방법은 무엇입니까? [복사]](https://linux55.com/image/24997/%ED%99%88%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%EB%B9%88%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
나는 홈 디렉토리 전체에 흩어져 있는 디렉토리를 자주 생성하는데, 이를 찾아서 삭제하는 것이 어렵습니다.
내 홈 디렉터리의 모든 빈 디렉터리를 찾아서 제거하려면 별칭/함수/스크립트를 사용하고 싶습니다.
답변1
이 find
명령은 재귀적 파일 시스템 작업을 위한 기본 도구입니다. 표현식을 사용하여 (일반 파일이 아닌) 디렉터리를 찾는 데에만 관심이 있음 -type d
을 알립니다 . find
GNU 버전은 테스트를 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