Bash Shell按日期查找文件

Bash Shell按日期查找文件,几个月前,有人给你发了一张 JPEG 图片,你接收后就保存了起来,但现在记不清放哪了。怎样才能找到这张图片呢?

解决方案

使用 find 命令的 -mtime 谓词来检查文件的最后修改日期。例如:

find . -name '*.jpg' -mtime +90 -print

讨论

-mtime 谓词接受一个参数,用于指定要搜索的时间段。90 代表 90 天。在数字前使用加号(+90)表明要搜索的文件是在 90 天前修改的。使用减号(-90)表明文件是在 90 天以内修改的。如果既没减号,也没加号,则表明正好就是 90 天。

find 还可以使用逻辑运算符 AND、OR、NOT,如果知道文件修改时间至少在一周(7 天)前,但不超过 14 天,那么就可以像下面这样将两个谓词结合起来。

find . -mtime +7 -a -mtime -14 -print

还有更复杂的,还可以用 OR 和 AND,甚至是 NOT 来结合多个谓词。

find . -mtime +14 -name '*.text' -o \( -mtime -14 -name '*.txt' \) -print

该命令会输出以 .text 结尾、修改时间在 14 天前的文件,或者修改时间在 14 天以内、以 .txt 结尾的那些文件。

为了获得正确的优先级,可能还得使用括号。连续出现的两个谓词,其效果类似于逻辑 AND,优先级高于 OR(在 find 中与在大多数编程语言中一样)。要想消除歧义,多用括号就行了。

括号在 bash 中有着特殊含义,需要对其进行转义,要么写作 \( 和 \),要么放入单引号,写作 '('')'。可别将整个表达式都放进单引号,这会把 find 命令搞晕的。它希望每个谓词都是独立的单词。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!