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