Unix의 'ls'이름순 정렬


127

ls 목록을 이름으로 정렬 할 수 있습니까 ?


10
인수없이 이름별로 정렬하지 않는 경우 ls가 다른 별칭으로 지정되었는지 확인하거나 존재하는 모든 별칭을 제거하는 전체 경로를 사용하여 호출 할 수 있습니다.
tvanfosson

gnu-coreutils ls는 기본적으로 정렬됩니다. 어떤 시스템을 사용하고 있습니까 (다른 사람이 요청
했듯이

유형 (즉, 디렉토리 먼저 파일)을 기준으로 정렬하지 않고 이름으로 정렬 하시겠습니까?
curtisk

대문자가 소문자보다 먼저 나오므로 파일 Z가 파일 a보다 앞에 와요 ... 어떻게 고칠 수 있나요?
ArtOfWarfare

맨 페이지에 '별도 및 사전 순으로 정렬 됨'이 표시됩니다. 파일은 첫 번째 문자에 따라 정렬됩니다 : 숫자 [0..9] 및 UPPER 문자 [A..Z] 및 로우 문자 [a..z]
Gürol Canbek

답변:


131

My ls는 기본적으로 이름별로 정렬됩니다. 당신은 무엇을보고 있습니까?

man ls 상태 :

List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.:


ls-c1지정된 경우 정렬하지 않습니다 : 그렇게 할 수있는 방법이 있습니까? ( --sort=name작동하지 않는 것 같습니다)
dhc

1
그것은 사실이 아닙니다. 와 함께 ls -la, 내가 봅니다 : .bashrc - can - .config - Downloads - .local - tmp, 정렬 이름은 다음과 같습니다..bashrc - .config - .local - Downloads - can - tmp
12431234123412341234123

1
내 말은 100.jpg가 10.jpg보다 먼저옵니다. "0"이 "."앞에 오면 이해할 수 있습니다. 하지만 여전히 직관적이지
chiliNUT

"b"앞에 "M"이 표시됩니다. 혼란스러워. 잠깐, 대문자가 중요합니까?
Daniel Springer

106

간단한 것을 위해 lssort 와 결합 할 수 있습니다 . 파일 이름 목록 :
ls -1 | 종류

역순으로 정렬하려면 :
ls -1 | 정렬 -r


3
다음과 같이 파일을 정렬하는 방법이 있습니까? ls | sort -n 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; 2.10.2 이전에 2.10.15를 볼 수 있습니다 .
BBK

저는 Pidion 기기에서 안드로이드 개발을하고 있는데 ls가 자동으로 정렬되지 않아서 매우 도움이되었습니다! 유일한 문제는 소프트 링크를 정렬하는 것처럼 보이지만 어떤 이유로 파일을 정렬하지 않는다는 것입니다
Mitch

Mac에서는 두 번째 명령을 ls -1r.
Ash Ryan Arnwine

4
@BBK sort -V는 버전 번호별로 정렬하므로 .. 2.10.2; 2.10.15; .. from man sort .. --sort = WORD는 WORD에 따라 정렬됩니다 : general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
mosh

35

lsfrom coreutils은 기본적으로 로케일 인식 정렬 을 수행 하므로 경우에 따라 놀라운 결과를 생성 할 수 있습니다 (예 : 및 에서 %foo정렬 ). ASCIIbetical 정렬을 원하면 다음을 사용하십시오.barquuxLANG=en_US

LANG=C ls

LANGilfnuence 정렬 동작,이 게시물은 나를 많이 도와줍니다!
yurenchen

이것은 나에게도 효과적이었습니다. 이것에 대해 자세히 설명해 주시겠습니까? 왜 다르게 정렬됩니까?
Kostas

1
이 용량은 작동하지만 출력 ?이 터미널 인 경우 모든 비 ASCII 문자에 대한 출력입니다 (ls의 잘못된 기능은 터미널로 출력되는지 확인하고 배관 할 때 작동합니다). cat to cat으로이 문제를 "수정"하고 C.UTF-8로케일을 사용하거나 (시스템에서 지원하는 경우) -b플래그를 사용할 수 있습니다 . 더 나은, 전혀 사용하지 말고 ls더 나은 사용`
12431234123412341234123

이를 통해 파일 이름 중 일부에 하이픈 (-)이 포함되어 있고 일부는 엔 대시 (-)가 포함되어 있다는 사실을 알게되었습니다. ls대시 앞의 하이픈을 정렬합니다.
Jamy Mahabier

17

* nix 도구의 장점은 다음과 같이 결합 할 수 있다는 것입니다.

ls -l | sort -k9,9

의 출력 ls -l은 다음과 같습니다.

-rw-rw-r-- 1 luckydonald luckydonald  532 Feb 21  2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt

따라서 9,9열을 열 9까지 정렬 9하여 파일 이름이됩니다. 중지 할 위치를 제공해야합니다.이 경우 동일한 열입니다. 열은로 시작합니다 1.

또한 대 / 소문자를 무시 --ignore-case하려면 sort 명령에 추가하십시오 .


1
무슨 -k9,9뜻이야?
luckydonald

발견 9하면 동일한 열까지 열을 정렬하는 것을 의미합니다 9. 정상적인 ls출력은 다음과 같습니다 : drwx------ 8 999 user 4.0K Feb 5 2017 file.txt, 따라서 9 열은 파일 이름입니다. 대소 문자를 무시하려면 --ignore-caseon sort를 사용하십시오 .
luckydonald

8

주의 사항 : "a"는 "Z"뒤에옵니다.

$ touch A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
이것은 항상 사실이 아닙니다. 이것이 사실이 아닌 상황을 정확히 알지 못하지만 Ubuntu 12.04를 실행하는 내 컴퓨터에서 ls의 출력이 알파벳순으로 정렬됩니다 (대소 문자 무시).
Patrick James McDougle 2013 년

잘 잡아! 는 ASCII 코드를 기반으로 그것을 주문처럼 .. 대문자 알파벳 소문자 뒤에 것 같다 ..
켄트 Pawar에게

1
내 MacOS가 첫 번째 숫자, 대문자, 밑줄, 소문자 순으로 정렬하는 것을 확인했습니다. 대소 문자를 구분하지 않는 것이 재밌습니다. 다른 한편으로, 제 데비안은 대소 문자를 구분하지만 동점이 없으면 문자를 구분하지 않고 정렬합니다. 그러면 소문자가 이깁니다! 예 : ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

나도 MAC에 있습니다. A, Z, a, z 유형의 정렬을보고 실망했습니다. 나는 A, a, Z, a를 선호하기 때문에 여기에 있습니다. 팁 주셔서 감사합니다. normal여기 에서 해결책 을 시험해 볼 것 입니다.
nyxee

8

숫자 문자열 만 다른 파일은 구분 기호가 앞에 오는 조건에서이 번호로 정렬 할 수 있습니다.

이 경우 다음 구문을 사용할 수 있습니다.

ls -x1 file | sort -t'<char>' -n -k2

예:

ls -1 TRA*log | sort -t'_' -n -k2

TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log

4

man 페이지에서 (bash ls 용) :

-cftuSUX 또는 --sort가 없으면 항목을 알파벳순으로 정렬합니다.


3
"bash ls"가 없습니다. "which ls"수행
Norbert Hartl

@Norbert : 맞습니다.하지만 which lsbash에 ls가 내장되어 있어도 성공할 것입니다. 오히려 builtin lsbash 에서 수행 하면 오류가 발생합니다.
Pianosaurus

4
@Norbert : which항상 경로를 반환합니다. type ls쉘이 생각하는 ls것 (내장, 기능, 실행 가능) 을 판별하는 데 사용하십시오 .
ephemient

3

ls유틸리티는 IEEE 표준 1003.1-2001 (준수해야합니다 POSIX.1상태) :

22027 : 현재 로케일의 조합 순서에 따라 디렉토리 및 비 디렉토리 피연산자를 개별적으로 정렬합니다.

26027 : 기본적으로 형식은 지정되지 않지만 출력 은 기호 이름에 따라 알파벳순으로 정렬됩니다 .

  • −A가 지정된 경우 라이브러리 또는 객체 이름
  • 기호 이름
  • 기호 유형
  • 기호의 가치
  • 해당되는 경우 기호와 관련된 크기


2

ls -X는 ls를 더 유용한 기본값으로 별명을 지정한 경우 이러한 목적으로 작동합니다.


0
In Debian Jessie, this works nice:

ls -lah --group-directories-first

# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha

# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.