유닉스에서 빈 디렉토리를 찾는 방법

유닉스에서 빈 디렉토리를 찾는 방법

쉘 스크립트를 사용하여 내 홈 디렉토리 아래의 모든 빈 디렉토리를 표시하고 싶습니다. 코드를 찾는 데 도움을 주실 수 있습니까? ( find'를 사용하지 마세요 -empty)

답변1

GNU 사용 find:

find ~ -type d -empty

(이것은 홈 디렉토리에서 시작하여 빈 디렉토리를 찾습니다).

답변2

-empty귀하의 발견에 플래그가 없는 경우 (예: from busbox또는 기타POSIX 호환find), 이렇게 해야 합니다(@에서 영감을 얻었습니다).요르단~의답변), 사용 bash:

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
  a=("$1"/*); [[ ${a[@]} ]] || printf "%s\n" "$1"' sh {} \;
  • -type d디렉토리만 찾기
  • -exec bash -c '...' sh {} \;발견된 각 디렉터리에 대해 bash 쉘을 호출합니다.
    • shopt -s nullglob; shopt -s dotglobbash경우, nullglob일치하는 항목이 없으면 bash가 패턴을 반환하지 않도록 방지할 수 있습니다. dotglob점( )으로 .시작하는 파일과 디렉터리를 포함합니다.
    • a=("$1"/*)$a처리 디렉터리의 모든 항목으로 배열을 채웁니다.
    • [[ ${a[@]} ]]해당 항목이 포함되어 있는지 확인하세요 $a. 그렇지 않다면...
    • printf "%s\n" "$1"디렉토리 이름 인쇄

목록을 추가로 처리하려면 항목을 null 바이트로 구분해야 합니다.

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
      a=("$1"/*); [[ ${a[@]} ]] || printf "%s\0" "$1"' sh {} \; | xargs -0 ...

답변3

빈 디렉토리를 찾고 싶다면존재하다홈 트리 아래의 모든 빈 디렉토리를 제외한 홈 디렉토리에서는 GNU를 사용할 수 있습니다 find.

find ~ -maxdepth 1 -type d -empty

관련 정보