我在一个目录中有一组文件。我需要查找一组特定日期的文件(例如,如果我需要从 1 月 16 日到 1 月 20 日的文件)。我尝试使用ls -ltr | grep <date>
,但完成选择文件的步骤太多。有没有更简单的方法来完成这项工作。谢谢!
问问题
56122 次
3 回答
21
我不确定您的目录中有多少文件,但这样的事情应该非常快:
ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 20 {print $9}'
在我的系统上,我看到以下日期略有修改:
pax> ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 29 {print $9}'
kids_shares.ods
our_savings.gnumeric
photos
pax> ls -ald kids_shares.ods our_savings.gnumeric photos
-rw-r--r-- 1 pax pax 51005 Jan 29 19:39 kids_shares.ods
-rw-r--r-- 1 pax pax 2275 Jan 28 14:48 our_savings.gnumeric
drwxrwxrwx 130 pax pax 4096 Jan 29 21:47 photos
您可以看到给定文件的日期匹配。
需要注意的一件事:如果文件是最近的,它将在第 8 列中有一个时间。超过某个年龄,ls
开始将年份放在那里。我模糊地记得它在六个月大的边界附近的某个地方,但我不确定。您还需要满足这一点。
于 2013-02-05T08:29:53.257 回答
11
改用find(1)
,那会容易得多。
find . -mtime -$start -mtime +$end
于 2013-02-05T08:25:41.437 回答
8
你最好使用find
. 首先创建两个具有特定时间的临时文件进行搜索。touch
可以这样做:
touch -t "201301160001" ./start
touch -t "201301202359" ./finish
然后运行find
:
find /path/to/files -type f -newer ./start ! -newer ./finish
于 2013-02-05T08:36:37.913 回答