디렉터리만 반환되도록 find 명령의 결과를 필터링합니다.

디렉터리만 반환되도록 find 명령의 결과를 필터링합니다.

디렉토리 경로에 대해서만 찾기 결과를 얻을 수 있습니까? 일부 옵션과 함께 find를 사용하거나 grep 또는 다른 유틸리티를 사용하여 결과를 필터로 연결하시겠습니까?

나는 비슷한 것이 find | grep */$효과가 있을 것이라고 생각했지만 그렇지 않습니다. 특정 이름을 가진 폴더를 "검색"한 다른 테스트에서 히트를 얻는 것처럼 보이지만 folder_name$아무 것도 없습니다 folder_name/$. 이것은 직관에 어긋나는 것 같습니다. 로 끝나는 줄을 찾기 위해 grep하는 방법은 무엇입니까 /?

답변1

예, 이것이 -type d바로 이 옵션의 목적입니다.

예를 들어:

$ find /boot -type d
/boot
/boot/grub
/boot/grub/locale
/boot/grub/fonts
/boot/grub/i386-pc

매뉴얼 페이지의 관련 부분은 다음과 같습니다.

   -type c
          File is of type c:

          b      block (buffered) special

          c      character (unbuffered) special

          d      directory

          p      named pipe (FIFO)

          f      regular file

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

          s      socket

          D      door (Solaris)

답변2

보충제로피레우스 제로의 답변, 디렉토리로 확인되는 심볼릭 링크를 포함하려는 경우:

  • GNU를 사용하여 다음을 찾으세요.

     find . -xtype d
    
  • POSIX적으로:

     find . -exec test -d {} \; -print
    

    다음과 같이 최적화할 수 있습니다.

     find . \( -type d -o -type l -exec test -d {} \; \) -print
    

디렉토리 트리를 내려갈 때 기호 링크를 따라가려면 다음을 수행할 수 있습니다.

find -L . -type d

디렉토리와 디렉토리에 대한 기호 링크를 보고합니다. 심볼릭 링크를 원하지 않는 경우:

  • GNU를 사용하여 다음을 찾으세요.

     find -L . -xtype d
    
  • POSIX적으로:

     find -L . -type d ! -exec test -L {} \; -print
    

그리고 zsh:

print -rC1 -- **/*(ND/)   # directories
print -rC1 -- **/*(ND-/)  # directories, or symlinks to directories
print -rC1 -- ***/*(ND/)  # directories, traversing symlinks
print -rC1 -- ***/*(ND-/) # directories or symlinks to directories,
                          # traversing symlinks

관련 정보