두 번째 문자부터 시작하여 디렉토리 목록을 정렬하려고 합니다.
예를 들어 아래 코드를 실행하면 디렉토리 목록은 첫 번째 문자를 기준으로 순서대로 나열됩니다.
$ ls -1d */
lrodriguez/
mreynolds/
yalberto/
내가 달성하고 싶은 것은 다음과 같이 표시하는 것입니다.
yalberto/
mreynolds/
lrodriguez/
다음 포럼을 확인했습니다. 이름의 일부로 파일을 정렬하는 방법은 무엇입니까? 그러나 성공하지 못했습니다.
나는 다음과 같은 것을 시도했지만 ls -1d -- *?[a-z]* | sort -t?[a-z] -k2
어떤 결과도 얻지 못했습니다. Unix 환경에 아주 새로운 것이므로 어떤 포인터라도 매우 도움이 될 것입니다. 미리 감사드립니다.
답변1
를 사용하면 다음 형식의 키를 사용하여 문자 위치를 지정할 sort
수 있습니다.F.C
이내에필드. 예를 들어
$ printf '%s\n' */ | sort -k1.2
yalberto/
mreynolds/
lrodriguez/
디렉터리 이름에 개행 문자가 포함되어 있으면 이 작업이 실패합니다.
sort
대신 NUL로 구분된 레코드를 사용하여 GNU로 이 문제를 해결할 수 있습니다 .
printf '%s\0' */ | sort -zk1.2 | tr '\0' '\n'
또한 확장에는 */
디렉터리에 대한 기호 링크도 포함되어 있습니다.
답변2
그리고 zsh
:
print -rC1 -- *(N/oe['REPLY=${REPLY#?}'])
print -rC1
olumn에 해당 매개변수r
aw를 인쇄합니다.1
C
*(qualifiers)
: glob 한정자가 있는 globN
:N
ulglob: 일치하는 항목이 없으면 비어 있게 확장됩니다./
: 파일 형식만 선택목차oe[expression]
:o
표현식 결과(표현식 연산 후 처음에 파일 이름이 포함된 값)를 기준으로e
목록을 정렬합니다 .$REPLY
REPLY=${REPLY#?}
: 파일 이름의 첫 번째 문자를 제거합니다.
무작위가 아닌 해당 순서로 정렬 하려면 끝에 첫 번째 문자(예 REPLY=${REPLY#?}.$REPLY[1]
: , asmith
) 를 추가할 수도 있습니다.bsmith
csmith