나는 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
설정하는 것과 동일한 효과를 갖습니다 (일치하지 않으면 아무것도 확장하지 않고 숨겨진 이름과도 일치함). 결과 이름은 단일 열에 인쇄됩니다( 백슬래시 시퀀스를 해석하지 않음).nullglob
dotglob
bash
print -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 \)
(이스케이프 처리되어 쉘에 아무런 의미가 없습니다).