ZSH의 와일드카드를 올바르게 사용하고 있는지 잘 모르겠지만 ls *(/)
아래의 디렉터리만 나열할 것이라고 생각했는데 pwd
그렇지 않습니다. 각 디렉터리 아래의 모든 파일을 재귀적으로 나열합니다 pwd
(저는이것유용한 zsh 팁 목록)
현재 경로 아래의 디렉토리를 구체적으로 나열하기 위한 올바른 와일드카드 문자는 무엇입니까?
답변1
나는 문제가 zsh globbing이 아니라 ls
디렉토리 인수가 주어졌을 때 디렉토리의 내용을 나열하는 기본 동작이라고 생각합니다.
한번 시도해 보시길 권합니다
ls -d -- <your-glob-here>
글로브를 테스트하는 가장 좋은 방법은 다음과 같습니다.
printf '%s\n' <glob>
또는
print -rC1 -- <glob>
답변2
이를 구현하는 또 다른 방법은
print *(/)
또는
echo *(/)
업데이트 1
조금더@Stéphane Chazelas가 지적한 것처럼 올바른 버전은 다음과 같습니다.
print -rl -- *(/)
또는
echo -E - *(/)
파일 이름에 공백(-l), 이스케이프 시퀀스(-r/-E) 및 선행 하이픈(-/-)을 기록해 두십시오.
업데이트 2
하지만심지어올바른 버전은 print -rN
결과를 null 값으로 구분하여 파일 이름 내 줄 바꿈(Linux에서는 허용, Windows에서는 허용되지 않음)을 추가로 처리하는 것입니다. 예를 들면 다음과 같습니다.
print -rN -- **/*(/) |xargs -0 -n10 chmod g+s
setguid 비트를 재귀적으로 설정합니다. 즉, 가 아닌 디렉토리 주소를 선택적으로 지정합니다 chmod -R g+s
.
업데이트 3
거대한 트리의 경우 명령줄 길이 제한으로 인해 파일의 일부만 처리하고 나머지는 자동으로 남겨둡니다. 다음 명령은 이 상황을 처리합니다.
find . -type d -print0 |xargs -0 -n10 chmod g+s
답변3
현재 디렉터리의 모든 디렉터리 유형 나열
ls -d -- *(/)
ls -d *(/)
그렇지 않으면 사용
ls -d */**(/)
모든 디렉터리를 재귀적으로 나열합니다.