Sắp xếp tệp trong Terminal như công cụ tìm


1

Có phải trong dòng lệnh có cùng thứ tự sắp xếp cho các tệp / thư mục như Finder. Nếu tôi chạy find . -type d, tôi nhận được như đầu ra:

./Folder 1
./Folder 10
./Folder 11
./Folder 2
./Folder 3
...

Tôi đã thử find -s . -type d, và cũng thêm một số sorttùy chọn. Không may mắn.

Điều tôi muốn là đây:

./Folder 1
./Folder 2
./Folder 3
...
./Folder 10
./Folder 11

2
Có một lý do cụ thể tại sao bạn sử dụng findthay vì ls?
nohillside

Câu trả lời:


2

Nếu bạn nhìn vào những gì findnói về sắp xếp:

 -s Nguyên nhân tìm thấy để vượt qua hệ thống phân cấp tệp trong 
thứ tự từ điển, nghĩa là thứ tự chữ cái trong mỗi thư mục.  
Lưu ý: `find -s` và` find | sắp xếp có thể cho kết quả khác nhau.

Điều này có nghĩa là chúng ta cần dẫn nó đến sortđể chúng ta có thể thao tác với nó nhiều hơn một chút.

Như bạn đã thấy, một loại chữ và số đơn giản sẽ không hoạt động vì nó so sánh mọi thứ như một ký tự ANSI không phải là số. Những gì chúng ta cần làm chỉ là so sánh các con số. Chúng ta có thể làm điều này với -ktùy chọnsort

find . -type d | sort -k2.3

Những gì sort -k2.3lệnh đang làm là sắp xếp trên trường thứ hai (được phân cách bởi khoảng trắng) kết thúc ở vị trí thứ 3. Đây là kết quả sử dụng quy ước đặt tên thư mục của bạn 1 :

.
./Folder 1
./Folder 2
./Folder 3
./Folder 4
./Folder 5
./Folder 6
./Folder 7
./Folder 8
./Folder 9
./Folder 10
./Folder 11
./Folder 12
./Folder 13
./Folder 14
./Folder 15

1 Để tạo cấu trúc thư mục này, tôi đã sử dụng lệnh trong thư mục nhà của mình:

mkdir test; cd test; for n in {1..15}; do mkdir "Folder $n"; done

Cảm ơn, tôi không biết -klựa chọn này. Tuy nhiên, điều đó không đáp ứng yêu cầu của tôi. Tôi đã thực hiện chương trình trăn nhỏ này để giải quyết vấn đề này.
doekman

0

Cũng có thể làm

ls -v

trong đó sắp xếp các tập tin theo số phiên bản trong tên theo thứ tự tự nhiên.

Từ man ls

-v     natural sort of (version) numbers within text

2
macOS không đi kèm với GNU ls được cài đặt.
fd0

1
GNU ls có thể được cài đặt thông qua Homebrew.
nohillside
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.