Unix 'ls' sắp xếp theo tên


127

Bạn có thể sắp xếp một danh sách ls theo tên?


10
Nếu nó không sắp xếp theo tên mà không có bất kỳ đối số nào, bạn có thể muốn kiểm tra xem ls đã được đặt bí danh cho thứ gì khác hay chỉ đơn giản gọi nó bằng cách sử dụng đường dẫn đầy đủ sẽ loại bỏ bất kỳ bí danh nào tồn tại.
tvanfosson

gnu-coreutils ls sắp xếp theo mặc định. Bạn đang sử dụng hệ thống nào (như những người khác đã hỏi)
Nick FortesTHER

Bạn có chắc chắn yêu cầu sắp xếp theo tên chứ không phải theo loại (ví dụ: thư mục đầu tiên sau đó là tệp) ??
curtisk

Chữ in hoa xuất hiện trước chữ cái viết thường, do đó tệp Z xuất hiện trước tệp ... làm thế nào tôi có thể sửa nó?
ArtOfWarfare

trang man nói 'được sắp xếp riêng và theo thứ tự từ điển'. Các tệp được sắp xếp theo ký tự đầu tiên: số [0..9] và ký tự UPPER [A..Z] và ký tự lowe [a..z]
Gürol Canbek

Câu trả lời:


131

Ls của tôi sắp xếp theo tên theo mặc định. Bạn đang nhìn cái gì vậy?

man ls Những trạng thái:

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


lskhông sắp xếp nếu -c1được chỉ định: có cách nào để làm điều đó không? ( --sort=namedường như không hoạt động)
dhc 16/1/2015

1
Điều đó không đúng. với ls -la, tôi thấy : .bashrc - can - .config - Downloads - .local - tmp, sắp xếp tên sẽ là:.bashrc - .config - .local - Downloads - can - tmp
12431234123412341234123

1
Của tôi nói 100.jpg đến trước 10.jpg. Có nghĩa là tôi đoán nếu "0" đến trước "." nhưng nó vẫn không trực quan
chiliNUT

Tôi đang thấy "M" trước "b". Bối rối. Đợi đã, vốn hóa có vấn đề?
Daniel Springer

105

Đối với một cái gì đó đơn giản, bạn có thể kết hợp ls với sort . Đối với chỉ một danh sách các tên tệp:
ls -1 | sắp xếp

Để sắp xếp chúng theo thứ tự ngược lại:
ls -1 | sắp xếp -r


3
Có cách nào để sắp xếp các tệp như thế này: 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; Như bạn có thể thấy 2.10.15 trước 2.10.2 .
BBK

Tôi đang thực hiện một số phát triển Android trên thiết bị Pidion và tôi không tự động sắp xếp, vì vậy điều này rất hữu ích! Vấn đề duy nhất là có vẻ như nó sắp xếp các liên kết mềm nhưng không sắp xếp các tệp, vì một số lý do
Mitch

Trên Mac, có vẻ như lệnh thứ hai có thể được rút ngắn ls -1r.
Ash Ryan Arnwine

4
@BBK sort -V sẽ sắp xếp theo số phiên bản, do đó bạn nhận được .. 2.10.2; 2,10,15; .. từ man sort .. --sort = WORD sẽ sắp xếp theo WORD: chung-số -g, người-số -h, tháng -M, số -n, ngẫu nhiên -R, phiên bản -V
mosh

35

lstừ việc coreutilsthực hiện sắp xếp nhận biết miền địa phương theo mặc định và do đó có thể tạo ra kết quả đáng ngạc nhiên trong một số trường hợp (ví dụ: %foosẽ sắp xếp giữa barquuxtrong LANG=en_US). Nếu bạn muốn sắp xếp ASCIIbatics, hãy sử dụng

LANG=C ls

LANGilfnuence các hành vi sắp xếp, bài này giúp tôi rất nhiều!
yurenchen

Cái này cũng có tác dụng với tôi. bạn có thể giải thích về điều này? Tại sao nó lại sắp xếp khác nhau?
Kostas

1
Liều này hoạt động, nhưng đầu ra ?cho mọi ký tự không phải ascii khi đầu ra là một thiết bị đầu cuối (tính năng xấu từ ls kiểm tra xem nó có xuất ra một thiết bị đầu cuối không, hoạt động khi đường ống). Bạn có thể "sửa" điều này bằng đường ống thành mèo, sử dụng C.UTF-8ngôn ngữ (nếu hệ thống của bạn hỗ trợ) và / hoặc sử dụng -bcờ. Thậm chí tốt hơn, không sử dụng lschút nào, sử dụng tốt hơn `
12431234123412341234123

Điều này giúp tôi phát hiện ra rằng đối với tôi, vấn đề là một số tên tệp của tôi có dấu gạch nối (-) và một số dấu gạch ngang (-). lssắp xếp các dấu gạch nối trước khi dấu gạch ngang.
Jamy Mahabier

17

Vẻ đẹp của các công cụ * nix là bạn có thể kết hợp chúng:

ls -l | sort -k9,9

Đầu ra của ls -lsẽ trông như thế này

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

Vì vậy, với 9,9bạn sắp xếp cột 9lên đến cột 9, là tên tệp. Bạn phải cung cấp nơi dừng lại, đó là cùng một cột trong trường hợp này. Các cột bắt đầu với 1.

Ngoài ra, nếu bạn muốn bỏ qua chữ hoa / thường, hãy thêm --ignore-casevào lệnh sort.


1
-k9,9nghĩa là gì?
luckydonald

Tìm ra, nó có nghĩa là sắp xếp cột 9lên đến cùng một cột 9. Một lsđầu ra bình thường trông như thế này : drwx------ 8 999 user 4.0K Feb 5 2017 file.txt, vì vậy cột 9 là tên tệp. Nếu bạn muốn bỏ qua các trường hợp, sử dụng --ignore-casetrên sắp xếp.
luckydonald

8

THÔNG BÁO: "a" đến SAU "Z":

$ chạm A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
Điêu nay không phải luc nao cung đung. Tôi không biết chính xác các trường hợp làm cho điều này không đúng, nhưng trên máy của tôi chạy Ubuntu 12.04, đầu ra của ls được sắp xếp theo thứ tự bảng chữ cái (bỏ qua trường hợp).
Patrick James McDougle

Nắm bắt tốt! Có vẻ như nó được đặt hàng dựa trên mã ASCII .. Bảng chữ cái in hoa được theo sau bởi chữ thường ..
Kent Pawar

1
Tôi nhận thấy rằng MacOS của tôi sắp xếp các số đầu tiên, sau đó là chữ in hoa, sau đó gạch dưới và sau đó là chữ thường. Thật buồn cười là họ không phân biệt chữ hoa chữ thường. Mặt khác, Debian của tôi phân biệt chữ hoa chữ thường nhưng nó sắp xếp các chữ cái không nhạy cảm trừ khi có sự ràng buộc, sau đó chữ thường sẽ thắng! Ví dụ: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

Tôi cũng đang dùng MAC. tôi đã thất vọng khi thấy loại sắp xếp A, Z, a, z. Tôi ở đây vì tôi thích có A, a, Z, a. cảm ơn vì tiền boa của bạn sẽ thử các normalgiải pháp ở đây.
nyxee

8

Các tệp chỉ khác nhau bởi một chuỗi số có thể được sắp xếp trên số này với điều kiện nó được phân tách trước dấu phân cách.

Trong trường hợp này, cú pháp sau có thể được sử dụng:

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

Thí dụ:

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

Từ trang man (cho bash ls):

Sắp xếp các mục theo thứ tự bảng chữ cái nếu không có -cftuSUX cũng như --sort.


3
Không có "bash ls". Làm "cái nào"
Norbert Hartl

@Norbert: Bạn đúng, nhưng which lssẽ thành công ngay cả khi bash có ls dựng sẵn. Thay vào đó, làm builtin lstrong bash, và nhận được một lỗi.
Pianosaurus

4
@Norbert: whichluôn trả về một đường dẫn. Sử dụng type lsđể xác định shell nghĩ gì ls(tích hợp, chức năng, thực thi).
ephemient

3

Các lstiện ích nên phù hợp với IEEE Std 1.003,1-2001 ( POSIX.1) trong đó nêu:

22027: nó sẽ sắp xếp các toán hạng thư mục và phi thư mục riêng biệt theo trình tự đối chiếu trong miền địa phương hiện tại.

26027: Theo mặc định, định dạng không xác định, nhưng đầu ra sẽ được sắp xếp theo thứ tự abc theo tên biểu tượng:

  • Tên thư viện hoặc đối tượng, nếu A được chỉ định
  • Tên biểu tượng
  • Loại biểu tượng
  • Giá trị của biểu tượng
  • Kích thước được liên kết với biểu tượng, nếu có

2

Kiểm tra .bashrctập tin của bạn cho bí danh.


7
Người ta chỉ có thể gõ aliasđể kiểm tra tất cả các bí danh hiện tại.
Krzysztof Jabłoński

2

ls -X hoạt động cho mục đích đó, trong trường hợp bạn có bí danh ls để mặc định hữu ích hơn.


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 --
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.