파일 확장자로 정렬하고 이름을 지정하는 방법은 무엇입니까?


44

기본적으로 ls 명령은 파일 이름을 기준으로 정렬하지만 디렉토리가 다른 파일 유형보다 먼저 나타나기를 원합니다. Windows 탐색기가 유형 열을 기준으로 정렬하는 방식과 같이 확장명별로 파일을 정렬하고 싶을 수도 있습니다. ls와 비슷한 것을 할 수있는 방법이 있습니까?

답변:


42

나는 완전한 대답이 위의 조합에 더 가깝다고 생각합니다.

-X (later --sort=extension)적어도 FC3부터 Linux에서 지원되었으며 확장에 따라 정렬됩니다. --group-directories-first더 최근에 추가되었습니다 (FC8 정도?). 그러나 두 가지를 결합해도 효과가없는 것 같습니다 (적어도 FC8에서는).

주요 문제는 단일 기본 정렬 키를 사용하는 것으로 보입니다. 이에 대한 통찰력에 대해서는이 메일 링리스트 토론 을 참조하십시오 .


5
의 조합 :이 게시물 오히려 오래된,하지만 (내가했던 것처럼) 예를 들어 구글에서 여기에오고 다른 사람에 알고 --sort=extension--group-directories-first(또는 유일한 --group-directories) 우분투 12.10에 나를 위해 잘 작동합니다. 당신의 기계에도 가치가 있습니다! =)
Tomas Aschan

예 아니오 결합 문제 -X / --sort=extension--group-directories-first아무것도 다른 나는 현대 리눅스 배포판에 시도하지했습니다. OP는 Fedora Core 8 (2007 릴리스)을 참조하므로 이러한 문제가 먼 과거에있을 가능성이 있습니다.
mattst



13

bash에서 이것은 일종의 작업입니다.

$ ls | rev | sort | rev

보낸 사람 man rev:

 The rev utility copies the specified files to the standard output,
 reversing the order of characters in every line.  If no files are speci-
 fied, the standard input is read.

따라서 1. ls는 원하는 플래그와 함께 출력을 제공합니다. 2. 각 줄은 뒤집어집니다 3. 그런 다음 정렬됩니다 4. 다시 정렬됩니다 5. 다음과 같이 :

  1. 이처럼 :
  2. 각 줄은 반대로
  3. 그런 다음 정렬됩니다
  4. 다시 거꾸로
  5. ls는 원하는 플래그로 출력을 제공합니다.

또는 아래와 같이 요점을 더 자세히 설명하십시오. 그것들은 마지막 문자로 정렬 된 다음 마지막으로 정렬됩니다. 예를 들어, 모든 .rtf 파일은 .save 파일과 이름이 'e'로 끝나는 확장자가없는 다른 파일 뒤에 함께 나열됩니다. 그런 다음 .png 파일 등을 가져옵니다. 확장명은 일반적으로 줄의 마지막 항목이기 때문에 ls -l에서도 작동합니다 ( "tmp @-> / home / jones / tmp"와 같은 행이 있고 링크 뒤에 대상이 오는 경우는 예외).

$ ls | rev | 정렬 | rev
 cslu1
 ls.mp2
 ls.mp3
 ls.mp4
 trees_110214-15
 가볍게 두드리기
 CSLU
 프록시 Form.doc
 finannbyid
 toannbyid
 101209ssi.txt.save
 to_annotate_size
 Matas-time-by-week-integration2.rtf
 cyp3.rtf
 data-dir-scan.perl.doc.rtf
 whence-r21-numid.rtf
 platypus.rtf
 스크린 샷 2011-01-21 at 2.17.50 PM.png
 emacs print help.png
 로그
 new_month_log
 특별한
 Google-ngram-critique.html
 perl_path.html
 nl
 DWE_BEN_89808.2.ann
 푸
 dofoo
 100811_from_iMac_Documents_in_dock.zip
 to-palikir.zip
 tmp
 파일 정리
 바
 데이터 스캔 문서
 cmp-mg-ann-numids
 finished_numids
 to_annotate_numids
 manls.ps
 Mike_address_ticket
 cyp2.out
 cyp3.out
 locate-cyp.out
 manls.out
 DWE_BEN_89808.2.text
 tag2.txt
 l2.txt
 du-h-d3.txt
 finished_ann_numids_110407_1714.txt
 finished_all_numids_110407_1718.txt
 data-dir-scan.perl.doc.txt
 whence-r21-numid.txt
 finannid.txt
 toannid.txt
 b9-workspace-anndiff.txt
 tag.txt
 duh.txt
 do-mail.txt
 safextn.txt
 mg3longhdr.txt
 finished_numids.txt
 41692-langnames.txt
 TimeAnnotationGuidelines.txt
 41langs.txt
 thing4-homedir-links.txt
 bnlinks.txt
 grants.txt
 mata-file-reports.txt
 logx.txt
 logx
 b9-workspace-anndiff.txt ~
 bnlinks.txt ~ 

1
그러나 먼저 디렉토리를 나열하지는 않습니다.
CarlF

그것은 것입니다 당신이 경우ls -F
글렌 잭맨

노력에 +1 ...
varun

@glennjackman 더 좋습니다. 대답에 있어야합니다.
목소리

-F파이프를 통해 rev& sort색상을 제거하지 않으면 (특히 ) 좋을 것 -G입니다.
목소리

3

리눅스를 사용하지 않는다면

ls -l |sort -d -k 1.1,1.1r -k 9 |awk '{print $9}'

먼저 디렉토리를 정렬해야합니다 (잘못된 경우 알려주세요). 확장을 기준으로 정렬하지는 않습니다. 원한다면 awk 문을 훨씬 더 바쁘게 만들어야합니다 ...


공백이 포함 된 이름으로도 작동하게하려면 아마도 awk를 sed -E -e 's/([^ ]+[ ]+){8}//'9 번째를 인쇄하는 대신 처음 8 개의 필드를 제거하는 것과 같은 것으로 바꿀 것입니다


실제로, 나는 이것이 리눅스에서도 작동 할 것이라고 확신하지만, 다른 사람들이 말했듯이 거기에 내장 된 지원이 있다고 언급했다.
Zac Thompson

1
Mac에서 작동합니다. 이 기능을 CLICOLOR켜면 색상이 제거됩니다.
eykanal

1
공백이있는 파일 이름에 대해 잘못된 결과를 제공합니다.
glenn jackman 2016 년

@glenn, 당신 말이 맞아 ... 이것이 걱정이라면 아마도 awk를 sed -E -e 's/([^ ]+[ ]+){8}//'9 번째를 인쇄하는 대신 처음 8 개의 필드를 제거하는 것과 같은 것으로 바꿀 것입니다.
Zac Thompson

ls -l |sort -d -k 1.1,1.1r -k 9 | cut -c 50-
nohillside

2

Linux에서 실행중인 경우 GNU ls는 다음 --sort옵션을 지원합니다 .

ls --sort=extension

요청한 내용이 아닙니다.
Sridhar Sarnobat가

0

좋은 접근 방식은 처음에는 폴더 를 분리 한 다음 정렬 된 파일을 확장자별로 정렬 하고 정렬 하여 정렬하는 것입니다.

ls -p | grep /;ls -p | grep -v / | rev | sort | rev

-1

.bashrc (linux)에 라인을 추가했습니다.

alias lx = "ls -X"

그런 식으로 lx를 입력하고 확장자별로 정렬합니다.


질문에 대한 답은 use ls -X:)
Andrew

에 대한 질문을 받았다하지 무엇을
스리 Sarnobat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.