Đây là phiên bản không sử dụng ls
. Nó nên được ít dễ bị tổn thương với những nhân vật kỳ lạ trong tên tập tin:
find . -maxdepth 1 -type f -name '*.html' -print0
\| xargs -0 stat --printf "%Y\t%n\n"
\| sort -n
\| tail -n 10
\| cut -f 2
\| xargs cp -t ../Test/
tôi đã sử dụng find
cho một vài lý do:
1) nếu có quá nhiều file trong một thư mục, bash sẽ gặp khó khăn ở các ký tự đại diện sự bành trướng*.
2) Sử dụng đối số -print0
để find
khắc phục sự cố bash mở rộng khoảng trống trong tên tệp trong nhiều mã thông báo.
* Thực ra, bash chia sẻ bộ nhớ đệm để mở rộng ký tự đại diện và biến môi trường của nó, vì vậy nó không phải là chức năng của số lượng tên tệp mà là tổng chiều dài của tên tệp và biến môi trường. Quá nhiều biến môi trường => không mở rộng ký tự đại diện.
EDIT: Kết hợp một số cải tiến của @ glennjackman. Giữ việc sử dụng ban đầu find
để tránh việc sử dụng mở rộng ký tự đại diện có thể bị lỗi trong một thư mục lớn.
Nguồn
2012-05-15 16:43:32
Bạn có thể sử dụng 'xargs' và tránh' awk' + 'sh' (cảm thấy xấu xí) hoặc có thể sử dụng' find ... -exec' và chỉ chạy một lệnh. – KurzedMetal
Tôi có thể thực hiện tìm kiếm nhưng chỉ tự hỏi làm thế nào để làm tương tự bằng cách sử dụng awk! – ThinkCode
Vui lòng xem [BashFAQ/003] (http://mywiki.wooledge.org/BashFAQ/003) và [BashFAQ/099] (http://mywiki.wooledge.org/BashFAQ/099). –