설정

설정

Windows 정렬 순서는 내 마음 속에 뿌리 박혀 있습니다. 안타깝게도 Windows에서는 이를 쉽게 변경할 수 있는 방법을 제공하지 않습니다.

Unix 도구를 사용하여 이 정렬 순서를 시뮬레이션하는 방법이 있습니까?

각각은 파일 이름의 예입니다.

{"Ie4 01", "Ie4!01", "Ie4_01", "Ie4_128", "Ie5", "Ie6", "Ie401sp2","Ie501sp2"}

올바른 정렬 순서

Ie4 01
Ie4!01
Ie4_01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2

답변1

Windows처럼 폴더와 파일을 분리하려는 경우 다음을 수행할 수 있습니다.

ls -d */ -1 | sort -V
ls -p | grep -v / | sort -V

답변2

GNU sort의 sort( -V) 버전은 다음과 같은 출력을 제공하는 것으로 보입니다.

~ printf "%s\n" "Ie5" "Ie6" "Ie4 01" 'Ie4!01' "Ie4_01" "Ie4_128" "Ie401sp2" "Ie501sp2" |
  sort -V
Ie4 01
Ie4!01
Ie4_01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2

답변3

특수 문자의 순서에 특별히 신경 쓰지 않는다면 zsh숫자 정렬 glob 한정자가 비슷할 것입니다.

설정

$ touch "Ie5" "Ie6" "Ie4 01" 'Ie4!01' "Ie4_01" "Ie4_128" "Ie401sp2" "Ie501sp2"
$ mkdir Foo Quux Ie7bar

zsh 전용

$ print -l *(n/) *(n^/)
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2

LS와 함께

$ ls -1df *(n/) *(n^/)
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2

플래그는 ls다음과 같습니다

  • 단일 열 출력 강제( -1) - 보기의 편의를 위한 것입니다.
  • -d디렉토리( ) 를 입력하지 마십시오 .
  • 수신 목록을 정렬하지 않음( -f또는 -U)

zsh glob 한정자는 다음을 의미합니다.

  • *(n/)- 디렉토리 목록으로 확장 /, 숫자순으로 정렬
  • *(n^/)- 프로젝트 목록으로 확장아니요 ^숫자순으로 정렬된 디렉토리

파일 이름을 인용하거나 null로 구분하는 것에 대해 걱정할 필요 없이 결과를 더 쉽게 조작할 수 있기 때문에 zsh 솔루션을 언급합니다. 예를 들어:

$ mine=( *(/n) *(n^/) )
$ for file in "${mine[@]}"; do print -l "$file"; done
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
$ print -l "${mine[-1]}"
Ie501sp2

관련 정보