나는 홈 디렉토리 전체에 흩어져 있는 디렉토리를 자주 생성하는데, 이를 찾아서 삭제하는 것이 어렵습니다.
내 홈 디렉터리의 모든 빈 디렉터리를 찾아서 제거하려면 별칭/함수/스크립트를 사용하고 싶습니다.
답변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