Làm cách nào để loại trừ các thư mục khi liệt kê các tệp trong thư mục hiện tại?
ls .
^ sẽ bao gồm các thư mục trong danh sách.
Làm cách nào để loại trừ các thư mục khi liệt kê các tệp trong thư mục hiện tại?
ls .
^ sẽ bao gồm các thư mục trong danh sách.
Câu trả lời:
Hãy thử cái này:
find . -maxdepth 1 -not -type d
ls .
không có thư mục - và đây là.
-ls
hoặc -exec ls -l {} \;
sẽ làm cho nó như ls -l
không có thư mục.
Để có được nó chính xác tương đương với ls .
bạn cần không hiển thị các thư mục ẩn.
find . -maxdepth 1 -not -type d -and -not -name '.*'
và điều đó vẫn để lại cho bạn './' tiền tố cho mỗi tên tệp. Đó không thực sự là một vấn đề, nhưng tôi nghĩ nó hơi xấu. Tôi đã đi với:
ls -p | grep -v '/$'
Và điều đó sẽ giúp bạn có một danh sách trông giống nhau và bạn cũng có thể thêm các ls
đối số bổ sung . Thêm một --color=always
và bạn sẽ lấy lại màu của bạn hoặc -a
để xem các tập tin ẩn.
Tôi thích câu trả lời của Alexandre bởi vì anh ấy thực sự phụ thuộc vào một đặc điểm hệ thống tập tin của tập tin được đề cập để nó sẽ không bị lừa bao giờ. Câu trả lời của tôi sẽ bị đánh lừa bởi một tệp có '/' là ký tự cuối cùng trong tên của nó. Nhưng có vẻ như đó là vấn đề.
Mặc dù đó là một bài viết cũ, nhưng tôi nghĩ rằng điều này có thể giúp ..
$ ls -l | grep -v ^ d
Nó sẽ liệt kê tất cả các tệp bao gồm các liên kết tượng trưng, ký tự và khối tệp.
Các giải pháp "tìm" ở trên làm mất một số khả năng của ls - ví dụ: chỉ liệt kê các tệp, được sắp xếp theo thời gian sửa đổi giảm dần.
Các câu trả lời "ls -p | grep" không xử lý một cách tao nhã với các yếu tố khác của ls như -R nếu chúng được mong muốn
Câu trả lời sau đây, verbose trong khi hơn, theo ý kiến của tôi phản ánh chân thật nhất ls hành vi và linh hoạt nhất để lựa chọn "file duy nhất"
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Chỉ cần thay thế các công tắc ls như mong muốn và kết quả sẽ chỉ được trả về với các tệp. Nếu các liên kết và các mục khác cũng được yêu cầu thì việc làm lại nhỏ sẽ cần phải được thực hiện để kiểm tra để đưa vào.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Với điều này, bạn vẫn có thể sử dụng bất kỳ tùy chọn khác ls
thường mất. Hoặc ... xóa -v
để chỉ liệt kê các thư mục. Hoặc ... thay thế thư mục bằng bất kỳ loại tệp nào file
hiểu và báo cáo, như ASCII, trống, ELF, v.v.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
nhanh hơn khoảng 3 lần trong các thử nghiệm của tôi
Tôi đã ở trên một hệ thống mà find
nhị phân không hỗ trợ -not
và cuối cùng tôi đã sử dụng:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Ưu điểm: Không phụ thuộc vào bất cứ điều gì khác ngoài sh ls echo
Tương thích với bash và dash
Có thể thay đổi để khớp với những thứ khác, (chẳng hạn như thư mục) bằng cách thay đổi -f
Nhanh nhất so với một số câu trả lời và sử dụng ít RAM và CPU hơn