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