나는 디렉토리를 생성한다
mkdir site_{1..44}
. 정렬하고 싶어요
site_1
site_2
site_3
site_4
...
site_44
나는 명령을 실행
ls | sort -h
하고
site_1
site_10
site_11
site_12
site_13
site_14
site_15
site_16
site_17
site_18
site_19
site_2
site_20
site_21
site_22
site_23
site_24
site_25
site_26
site_27
site_28
site_29
site_3
site_30
site_31
site_32
site_33
site_34
site_35
site_36
site_37
site_38
site_39
site_4
site_40
site_41
site_42
site_43
site_44
site_5
site_6
site_7
site_8
site_9
내가 어디서 잘못됐나요?
답변1
GNU 사용 ls
:
ls -1 -v
ls --format=single-column --sort=version
GNU 사용 sort
(그리고 파일 이름에 개행 문자가 포함되어 있지 않다고 가정):
ls | sort -V
ls | sort --version-sort
를 사용하면 zsh
glob 한정자를 사용하여 숫자로 glob을 정렬할 수도 있습니다 n
.
print -rC1 -- *(Nn)
(여기서 ullglob 한정자가 사용되므로 N
일치하는 파일이 없으면( *
패턴으로 숨겨지지 않은 파일이 없는 경우) 오류를 발생시키는 대신 아무것도 인쇄하지 않습니다.)
에 전달된 경우 자체 정렬을 비활성화하도록 ls
지시해야 합니다 ( / GNU 사용 ).ls
-U
--sort=none
ls
ls -ldU -- *(n)
N
( 인수가 전달되지 않으면 아무 것도 나열 ls
되지 않으므로 여기서는 사용되지 않습니다 .
.)
Make it the default 를 사용할 수도 있습니다 set -o numericglobsort
.
하지만 더 나은 접근 방식은 파일 이름에 0 패딩을 사용하여 숫자와 어휘가 동일하게 정렬되도록 하는 것입니다.
mkdir site_{01..44} # zsh, bash, yash -o braceexpand
mkdir site_{1..44%02d} # ksh93
GNU sort -h
자체가 정렬되어 있습니다.사람이 읽을 수 있는 크기As du -h
또는 ls -sh
example이 표시된 곳에서는 123456789
example이 로 표현되므로 118M
여기서는 소용이 없습니다.
귀하의 경우에는 site_1
... 보이는 것부터 시작하지 마십시오사람이 읽을 수 있는 크기, 둘 다 0으로 처리되고 동일하게 정렬됩니다. 그러나 마지막 비교로 인해 전체 행을 어휘적으로 비교하여 연결을 끊는 어휘 정렬이 수행됩니다.
디렉토리 이름이 지정되어 있고 나중에 찾은 크기에 따라 정렬하려는 경우에도 site_314
해당 디렉토리 site_1.1K
가 어디에 있는지 알려 주어야 합니다.site_0.9M
_
sort
사람이 읽을 수 있는 크기sort -t_ -k1,1 -k2h
첫 번째 어휘 앞의 부분을 먼저 정렬 _
한 다음 그 뒤의 부분을 정렬하여 _
다음과 같이 해석하는 것과 같습니다 .사람이 읽을 수 있는 크기h
ey 사양을 준수 하는 로고가 포함되어 있습니다 k
.