와일드카드 연산자를 실행했습니다.
**
디렉토리 목록에서
ls -d "$PWD/"**/
하지만 Enter 키를 누르고...기다리고...기다리고...수천 개의 행을 생성한 후 즉시 답변을 다시 토해내는 것을 발견했습니다.
출력이 한 번에 하나의 전역 변수 대신 한 번에 한 줄씩 생성되도록 할 수 있습니까? 이것이 전역 설정인지, OS 설정인지, 아니면 프로필 설정인지 궁금합니다.
(흥미롭게도 이 질문은 외부 디스플레이(컴퓨터 모니터)와 컴퓨터 내부 처리 사이의 경계를 넘나듭니다.
이 질문은 내 위치를 바꾸는 것으로 생각될 수 있습니다.관찰자모니터 밖부터 컴퓨터 작업 공간 안 어딘가까지 내가 갈 수 없는 곳, 나의관찰자갈 수는 없지만 역설적으로할 수 있는가서 그냥 거기로 가려면... 비물질 공간에 있기 때문에 우리는 그 공간이나 그 공간의 겉보기 동작을 결코 확신할 수 없습니다.
저는 이러한 다른 쉘을 사용하여 컴퓨터 기능의 이러한 공간 내부를 볼 수 있게 해주는 다른 쉘이 있는지에 대해 다른 공간에서 또 다른 질문을 할 것입니다. 그러나 그것은 범위를 벗어나기 때문에 여기서는 더 자세히 다루지 않겠습니다. 이 질문 범위의. )
답변1
파일 이름 생성이라고도 알려진 glob 의 요점은 패턴과 일치하는 파일 경로의 (정렬된) 목록을 생성한 다음 명령에 전달하는 것입니다.
물론 목록은 명령에 전달되기 전에 작성되어야 합니다. 왜냐하면 목록 전체가 시스템 호출에 대한 인수로 전달되기 때문입니다 execve()
.
명령 인수에 glob을 전달할 필요가 없으며 다음과 같이 결과를 배열에 할당할 수도 있습니다.
files=( **/*.txt )
또는 루프에서 사용하십시오 for
.
for file in **/*.txt; do...
그러나 이번에도 목록이 먼저 구성되고 정렬된 다음 처리됩니다.
파일만 인쇄하려면 glob 한정자의 일부로 **/
쉘과 함께 zsh 쉘(원래 1992년) 을 사용할 수 있습니다. print
좋다:
**/*(N^e['print -r -- $REPLY'])
+funcname
또는 대신 도우미 함수와 한정자를 사용하세요 e[code]
.
p() { print -r -- $REPLY; false; }
그 다음에:
**/*(N+p)
또는 이후 set -o globstarshort
:
**(N+p)
또는:
**(/N+p)
파일 형식의 경우목차오직.
목록은 정렬되지 않습니다.
물론 ls -ld --
대신 사용할 수는 있지만 내장되어 print -r --
있지만 그렇지 않으며 각 파일에 대해 새 프로세스에서 별도로 실행하는 데 비용이 많이 듭니다.print
ls
ls
파일에서 더 많은 정보를 얻으려면 zsh의 stat
내장 기능을 사용하는 것이 좋습니다( zmodload zsh/stat
먼저 로드).
1 여기서는 glob 한정자가 사용됩니다 /
. 이렇게 하면 모든 디렉토리에 **/
추가된 디렉토리에 대한 심볼릭 링크도 얻게 됩니다 ./
답변2
이것은 와일드카드 find
가 아닌 직업처럼 들립니다 .ls
find "${PWD}" -type d
기술적/철학적 뒷부분은 다루지 않겠습니다.