Tôi đang cố gắng tìm kiếm các tập tin được tạo vào tháng Sáu, tháng Bảy và tháng Tám. Tôi đã sử dụng phương pháp này
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
nhưng nó không hoạt động.
Tôi đang cố gắng tìm kiếm các tập tin được tạo vào tháng Sáu, tháng Bảy và tháng Tám. Tôi đã sử dụng phương pháp này
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
nhưng nó không hoạt động.
Câu trả lời:
Bạn có thể kết hợp trên nhiều mẫu như vậy:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Điều này trả về tất cả các trận đấu cho tháng sáu, tháng bảy hoặc tháng tám. Bạn không yêu cầu print
tuyên bố vì đó là awk
hành động mặc định.
awk '/Jun|Jul|Aug/'
hoặcawk '/Ju[nl]|Aug/'
Theo nguyên tắc chung, việc phân tích đầu ra của ls là một ý tưởng rất tồi . Một cách tốt hơn để làm những gì bạn muốn là
stat -c "%n %y" * | grep 2013-0[678]
Ngoài ra, chỉ kiểm tra trường cuối cùng để bảo vệ khỏi trường hợp không thể xảy ra khi tên tệp là ngày:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Từ man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
để chỉ kiểm tra trường đầu ra cuối cùng, trong trường hợp (không chắc?) Ngay cả khi tên của tệp khớp với biểu thức chính quy ngay cả khi ngày không.
ls
là một lệnh để hiển thị thông tin về các tập tin trong một con người có thể đọc được. Không sử dụng nó trong các kịch bản .
Lệnh tìm tệp trong cây thư mục phù hợp với tiêu chí nhất định là find
. Nếu bạn có GNU find (tức là Linux không nhúng hoặc Cygwin) hoặc FreeBSD find (tức là FreeBSD hoặc OSX), bạn có thể sử dụng -newermt
để khớp các tệp được sửa đổi lần cuối sau một ngày nhất định.
find . -newermt '1 June' ! -newermt '1 September' -print
Thêm một năm nếu bạn muốn khớp các tệp trong một năm cụ thể, thay vì năm dương lịch khi tập lệnh chạy.
Nếu việc triển khai tìm kiếm của bạn không có -newermt
, bạn sẽ phải thực hiện -newer
, so sánh ngày của tệp find
được tìm thấy với một tệp cố định. sử dụng touch
để tạo các tệp tạm thời với ngày bạn muốn sử dụng làm ranh giới.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
cấu trúc khớp với một ký tự, có thể là bất kỳ một trong các ký tự giữa các dấu ngoặc. Vì vậy, biểu thức của bạn khớpJJA
hoặcJug
(J
từ[Jun]
,u
từ[Jul]
vàg
từ[Aug]
) nhưng không phải là chữ viết tắt tháng mà bạn hy vọng khớp.