두 번째 문자로 시작하여 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 r에 인수 aw를 인쇄합니다.1 C
  • *(qualifiers): glob 한정자가 있는 glob
  • N: Nulglob: 일치하는 항목이 없으면 아무것도 확장되지 않습니다.
  • /: 해당 유형의 파일만 선택예배 규칙서
  • oe[expression]: o표현식 결과 ( 표현식에 의해 조작된 후 처음에 파일 이름을 포함하는 e값 )를 기반으로 목록을 작성합니다.$REPLY
  • REPLY=${REPLY#?}: 파일 이름에서 첫 번째 문자를 제거합니다.

, , 무작위 대신 해당 순서로 정렬하도록 REPLY=${REPLY#?}.$REPLY[1]와 같이 끝에 첫 번째 문자를 추가할 수도 있습니다 .asmithbsmithcsmith

관련 정보