我需要在给定目录中查找最近 N 天内修改过的文件,其中 N 是脚本的第二个参数。基本上,我需要给命令提供 2 个数字(参数)并运行一个脚本来执行此操作。
这行代码是否可以正确查找文件?
find . -type f -mtime $2 -exec ls -l {} \;
答案1
有点。您不需要-exec ls -l {} \;
,该find
命令已经列出了文件。如果您想列出更多详细信息,可以使用find -ls
。两者都没有什么问题-exec ls ...
,如果你愿意的话也可以,只是不需要。
将-mtime N
找到被修改的文件确切地N天前。详细信息位于man find
:
+n for greater than n,
-n for less than n,
n for exactly n.
因此,要查找最近 2 天内修改的文件,您可以运行
find /target/path -mtime -2 -ls
请注意,find .
将在当前目录中搜索。要在特定目录中搜索,请使用类似find /path/to/dir
.如果第一个参数是目标目录,请使用(请记住始终引用您的变量):
find "$1" -mtime -"$2" -ls
另请注意,-mtime
仅处理 24 小时周期“天”。编写命令时需要考虑到这一点。正如man find
(这是针对-atime
但同样适用于)中所解释的-mtime
:
文件上次访问时间为 n*24 小时前。当 find 计算出上次访问该文件是在多少个 24 小时周期之前,任何小数部分都会被忽略,因此要匹配 -atime +1,文件必须至少在两天前被访问过。