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 한정자 /@이전 와일드카드 패턴이 각각 디렉터리 또는 기호 링크만 일치하도록 하며 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 \)

(이스케이프되어 쉘에 의미가 없습니다).

관련 정보