Làm cách nào tôi chỉ có thể liệt kê các tệp không trống bằng ls?


36

Làm cách nào tôi có thể liệt kê (sử dụng ls) tất cả các tệp không trống (kích thước> 0) bằng linux?

Câu trả lời:


49

Tôi sẽ sử dụng find dirname -not -empty -ls, giả sử GNU tìm thấy.


1
Bất cứ ai quan tâm để giải thích các downvote?
Daenyth

Có lẽ bởi vì người hỏi đã yêu cầu lsvà bạn đã sử dụng find;) Tôi đã bật lên ... Đó là một giải pháp thích hợp
BloodPhilia

2
Nếu bạn sử dụng "find. -Không -empty -ls" thì nó cũng sẽ bao gồm thư mục hiện tại (tức là "." Trong đầu ra của nó), để chỉ bao gồm các tệp hiện tại sử dụng "find. -Ttype f -not -empty -ls"
dùng672009

19

Đây là một công việc để tìm ls không đủ mạnh.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - điều này cho biết chỉ tìm kiếm thư mục hiện tại, loại bỏ để tìm trong tất cả các thư mục con hoặc thay đổi số để giảm xuống 2, 3 hoặc nhiều cấp độ.

-size +0điều này cho biết tìm kiếm các tệp có kích thước lớn hơn 0byte. 0có thể được thay đổi thành bất kỳ kích thước nào bạn muốn.

-print nói với tìm để in ra đường dẫn đầy đủ đến tập tin mà nó tìm thấy

Chỉnh sửa:
Bổ sung muộn: Có lẽ bạn cũng nên thêm công -type ftắc ở trên. Điều này cho biết chỉ tìm thấy tập tin. Và như đã lưu ý trong các bình luận dưới đây, việc -printchuyển đổi là không thực sự cần thiết.


1
Để tránh cảnh báo bạn nên đặt -maxdepth 1trước -size +0. Cũng -printlà hành động mặc định, vì vậy nó không cần thiết.
cYrus

@cYrus - Không có cảnh báo nào cho tôi (cygwin)
Nifle

Việc triển khai findkhác nhau rất nhiều về các tùy chọn hợp lệ là gì và nơi chúng có thể đi. GNU find(rất phổ biến) sẽ đưa ra cảnh báo nếu bạn đặt -sizetrước -maxdepth.
Telemachus


8
ls -l | awk '{if ($5 != 0) print $9}'

Nếu bạn có ý định sử dụng ls, bạn cần một chút trợ giúp từ awk.


7

Ls gần như không có tùy chọn để lọc các tệp: đó không phải là công việc của nó. Lọc các tập tin là công việc của trình bao cho các trường hợp đơn giản (thông qua toàn cầu) và công việc tìm kiếm cho các trường hợp phức tạp.

Trong zsh, bạn có thể sử dụng Lvòng loại toàn cầu để chỉ giữ lại các tệp có kích thước> 0 ( .vòng loại giới hạn ở các tệp thông thường):

ls *(.L+0)

Người dùng của các shell khác phải sử dụng find. Với GNU find (như được tìm thấy chủ yếu trên Linux):

find -maxdepth 1 -type f ! -empty -exec ls {} +

Một cách tuân thủ POSIX là:

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

Nếu lskhông chỉ là một ví dụ và bạn chỉ có ý định kiểm tra trực quan, bạn có thể sắp xếp theo kích thước : ls -S.


3
 $ find /* -type f ! -size 0

sẽ hoạt động tốt hơn nếu bạn muốn tất cả các tệp không trống, thay vì chỉ các thư mục.


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
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.