Unix에서는 두 번째 문자부터 폴더 정렬

Unix에서는 두 번째 문자부터 폴더 정렬

두 번째 문자부터 시작하여 디렉토리 목록을 정렬하려고 합니다.

예를 들어 아래 코드를 실행하면 디렉토리 목록은 첫 번째 문자를 기준으로 순서대로 나열됩니다.

$ 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 -rC1olumn에 해당 매개변수 raw를 인쇄합니다.1 C
  • *(qualifiers): glob 한정자가 있는 glob
  • N: Nulglob: 일치하는 항목이 없으면 비어 있게 확장됩니다.
  • /: 파일 형식만 선택목차
  • oe[expression]: o표현식 결과(표현식 연산 후 처음에 파일 이름이 포함된 값)를 기준으로 e목록을 정렬합니다 .$REPLY
  • REPLY=${REPLY#?}: 파일 이름의 첫 번째 문자를 제거합니다.

무작위가 아닌 해당 순서로 정렬 하려면 끝에 첫 번째 문자(예 REPLY=${REPLY#?}.$REPLY[1]: , asmith) 를 추가할 수도 있습니다.bsmithcsmith

관련 정보