아래와 같이 디렉토리의 파일 이름을 정렬하려고합니다.
$ ls -1v
file-1.10.0-114.1.1.x86.tb1_2.rpm
file-1.10.0-114.2.2.x86.tb1_2.rpm
file-1.10.0-114.11.2.x86.tb1_2.rpm
file-1.10.0-114.x86.tb1_2.rpm
file-1.10.0-115.1.1.x86.tb1_2.rpm
file-1.10.0-115.2.2.x86.tb1_2.rpm
file-1.10.0-115.3.1.x86.tb1_2.rpm
file-1.10.0-115.22.1.x86.tb1_2.rpm
file-1.10.0-115.x86.tb1_2.rpm
그러나 나의 기대는 다음과 같다.
file-1.10.0-114.x86.tb1_2.rpm
file-1.10.0-114.1.1.x86.tb1_2.rpm
file-1.10.0-114.2.2.x86.tb1_2.rpm
file-1.10.0-114.11.2.x86.tb1_2.rpm
file-1.10.0-115.x86.tb1_2.rpm
file-1.10.0-115.1.1.x86.tb1_2.rpm
file-1.10.0-115.2.2.x86.tb1_2.rpm
file-1.10.0-115.3.1.x86.tb1_2.rpm
file-1.10.0-115.22.1.x86.tb1_2.rpm
시도해 보았지만 sort -V
동일한 결과가 나타납니다. 어떻게 정렬해야 하나요?
답변1
다음 명령을 사용해 보십시오:
ls -h | sort -t. -k3,3 -k4,4n
ls -h
- ls 명령의 표준 출력(사용자 및 그룹 이름에 점이 포함되어 있지 않으면 ls -lh를 사용하여 동일한 결과를 얻을 수 있음)
-t.
- 명령 정렬을 위한 구분 기호를 설정합니다.
-k3,3
- 세 번째 필드로 정렬
금후...
-k4,4n
- 네 번째 필드를 기준으로 숫자순으로 정렬
답변2
를 사용하면 zsh
다음을 수행할 수 있습니다.
print -rl file*.rpm(noe:'REPLY=${REPLY%.x*}':)
즉, n
뒷부분이 제거된 파일 이름이 .x*
숫자순으로 정렬됩니다( ).
GNU를 사용하여 비슷한 작업을 수행할 수 있습니다 sort
.
ls | sort -Vtx -k 1,1
다른 장소 가 없다고 가정하면 x
, 개행 문자가 포함된 파일 이름에 문제가 발생할 수 있습니다.
아니면 이렇게 할 수도 있습니다:
print -rl file*.rpm(noe:'REPLY=${REPLY//(#m)<->/Z$MATCH}':)
(with ) 각 숫자 앞에 so를 extendedglob
붙여서 정렬합니다 .Z
Z115.xZ86...
Z115.Z1...