2012-11-13 31 views
5

tôi cần phải sắp xếp .flv file số lượng và tôi đã có thể làm điều đó với lệnh sau:Sắp xếp các file bằng số trong bash

ls *\.flv | sort --version-sort -f 

nhưng với nhiều tập tin (hàng trăm) nó không sắp xếp một cách chính xác.

ls *\.flv | sort --version-sort -f | tail -n 20 
e680.flv 
e681.flv 
e682.flv 
e683.flv 
e684.flv 
e685.flv 
e686.flv 
e687.flv 
e688.flv 
e689.flv 
e690.flv 
e691.flv 
e692.flv 
e693.flv 
e694.flv 
e695.flv 
**e696.flv** 
s572.flv 
s602.flv 
s654.flv 

nhưng điều lạ lùng là nếu tôi hủy lệnh mà không cần "*.flv" hoạt động. tôi có thể sử dụng chỉ ls nhưng tôi có các loại tệp khác trong thư mục.

ls | sort --version-sort -f | tail -n 20 
e680.flv 
e681.flv 
e682.flv 
e683.flv 
e684.flv 
e685.flv 
e686.flv 
e687.flv 
e688.flv 
e689.flv 
e690.flv 
e691.flv 
e692.flv 
e693.flv 
e694.flv 
e695.flv 
e696.flv 

những gì tôi đã cố gắng cho đến nay:

ls | sort --version-sort -f | grep "flv" 
    ls *.flv | sort --version-sort -f 
    ls *\.flv | sort --version-sort -f 
    ls *.flv | sort -f 
+2

vấn đề là gì 'e696.flv' ở đúng nơi, đúng không? – dogbane

+0

bạn có cố thực hiện đơn giản "ls * .flv | sort -f | tail -n 20 " – m1k3y3

+0

@ m1k3y3 nó sẽ không hoạt động với việc thay đổi số chữ số trong tên tệp –

Trả lời

11

tôi sẽ cố gắng sau mã. Hoạt động trên kịch bản thử nghiệm của tôi: file

ls -1 *\.flv | sort -n -k1.2 

Các ls danh sách flv 1 trên mỗi dòng, sort mất đầu tiên (và duy nhất) từ trên mỗi dòng bắt đầu từ ngày nhân vật thứ hai (đầu số). Các loại số lượng

5

để sắp xếp số lượng sau ký tự đầu tiên, hãy thử này:

sort -k1.2n 
2

Cho một thư mục với các tập tin tuần tự đặt tên từ 1.flv để 9999.flv

ls -v1 *.flv 

chí đầu ra:

1.flv 
2.flv 
... 
10.flv 
... 
90.flv 
... 
100.flv 
101.flv 
... 
9999.flv 
Các vấn đề liên quan