find 명령을 사용하여 심볼릭 링크와 디렉토리를 모두 찾는 방법

find 명령을 사용하여 심볼릭 링크와 디렉토리를 모두 찾는 방법

나는 find 명령을 싫어합니다. 단지 그것을 꺼내고 싶습니다. 제가 수년 동안 사용해 본 Linux 분야에서 단연 최악으로 설계된 CLI 도구입니다.

결과적으로 다음 명령은 아무것도 반환하지 않습니다.

cd "$go_proj_path_root" && cd .. && find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l -type d

분명히 -type l과 -type d가 서로 모순되기 때문에 아무것도 반환하지 않습니까? 방금 사용하는 경우 :

cd "$go_proj_path_root" && cd .. && find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l 

그런 다음 디렉토리에서 심볼릭 링크를 찾습니다. 동일한 명령으로 디렉토리와 심볼릭 링크를 모두 찾을 수 있는 방법이 있습니까? 정말 끔찍해요, 찾아보세요! 심볼릭 링크만 원했다면 -type l..wtf를 사용하면 됩니다.

답변1

예, -type l -type d"파일이 디렉터리인 경우"를 의미합니다.그리고심볼릭 링크". 시도해보고 싶은 것은 입니다 \( -type l -o -type d \).

( 액세스할 수 있는 디렉터리인지 cd확인하기 위해 사용하지 않는 한 ) 꼭 필요한 것은 아닙니다.$go_proj_path_root

find "$go_proj_path_root" -mindepth 1 -maxdepth 1 \( -type l -o -type d \) -print

또는 단일 디렉토리의 파일에만 관심이 있는 것 같으므로 다음을 수행하십시오.

shopt -s nullglob dotglob
for name in "$go_proj_path_root"/*; do
    if [ -d "$name" ] || [ -L "$name" ]; then
        printf '%s\n' "$name"
    fi
done

쉘 사용 zsh:

print -rC1 -- $go_proj_path_root/*(ND/) $go_proj_path_root/*(ND@)

... glob 한정자 /@이전 globbing 패턴이 각각 디렉토리 또는 심볼릭 링크와만 일치하도록 하며 및 셸 옵션을 ND설정하는 것과 동일한 효과를 갖습니다 (일치하지 않으면 아무것도 확장하지 않고 숨겨진 이름과도 일치함). 결과 이름은 단일 열에 인쇄됩니다( 백슬래시 시퀀스를 해석하지 않음).nullglobdotglobbashprint -rC1-r

답변2

찾을 기준을 추가하면 기본적으로 모두 적용됩니다.

find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l -type d

링크이자 디렉토리인 파일을 요청합니다.

"또는"을 사용해야 합니다.

find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l -o -type d

여기서는 꼭 필요한 것은 아니지만 다음과 같이 괄호를 사용하는 습관을 들이는 것이 좋습니다 -o.

find "$go_proj_path_root" -mindepth 1 -maxdepth 1 \( -type l -o -type d \)

(이스케이프 처리되어 쉘에 아무런 의미가 없습니다).

관련 정보