숫자순으로 정렬된 파일 나열

숫자순으로 정렬된 파일 나열

log1에서 까지 의 파일이 많이 있습니다 log164.

UNIX 터미널에서 디렉터리를 정렬하여 나열하려고 하는데 정렬 기능이 다음 형식만 제공합니다.

home:logs Home$ ls -1 | sort
log1.gz
log10.gz
log100.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
...etc

내가 원하는 건

home:logs Home$ ls -1 | sort
log1.gz
log2.gz
log3.gz
log4.gz
log5.gz
log6.gz
log7.gz
...{more here}
log99.gz
log100.gz
log101.gz
log102.gz
...etc

이 작업을 수행하기 위해 무엇을 사용할 수 있는지에 대한 제안이 있습니까?

답변1

ls이 특별한 경우에 내장된 GNU 기능을 사용하는 것은 어떨까요?

-v— 텍스트에서 (버전) 번호의 자연스러운 순서

예를 들어:

ls -1v log*

답변2

GNU ls 사용(즉, Linux, Cygwin 또는 GNU ls가 특별히 설치된 기타 시스템에서):

ls -v

zsh에서:

echo *(n)

다른 쉘에서는:

echo log?.gz log??.gz log???.gz

각 파일 이름을 별도의 줄에 표시하려면 echo로 바꾸십시오.printf '%s\n'

파일 메타데이터( )도 필요 ls -l하고 GNU ls가 없는 경우 ls사전순으로 보려는 각 파일 이름 또는 파일 이름 그룹에 대해 별도로 호출해야 합니다.

ls -ld log?.gz; ls -ld log??.gz; ls -ld log???.gz

이러한 어려움을 피하려면 파일 이름 앞에 0을 충분히 사용하여 사전 정렬이 보다 사용자 친화적이도록 하십시오( log001.gz예:).

답변3

bash중괄호는 {}순서대로 나열됩니다.

for file in log{1..164}.gz; do
    process "$file"
done

답변4

이 특별한 경우에는 ls -1v의심할 여지 없이 솔루션이 최고이지만 sort, 입력이 에서 나오지 않을 때도 작동하기 때문에 원래 질문에서와 마찬가지로 작동하는 솔루션도 갖는 것이 더 나을 것이라고 생각합니다 ls. 이 경우 다음을 사용할 수 있습니다.

ls -1 | sort -n -k1.4

-n옵션은 숫자로 정렬하고 -k 1.4정렬 키를 첫 번째 필드(이 경우 전체 파일 이름)에 설정하도록 지시하며, 4번째 문자부터 시작하여 마지막 문자로 끝납니다.

관련 정보