该命令find . -name '*2015*' -mmin +1440 -ls
可能会执行您想要的操作。有关详情,请参见下文。
您的第一个命令是-name 2015
。它不起作用,因为它仅找到名称完全相同的 文件2015
,其中没有其他字符。
您的第二个命令find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
可能由于以下几个原因而失败:
1.未引号的*
字符由外壳扩展,然后传递给find
。
如果当前目录中直接包含任何文件(运行该find ...
命令时您所在的文件)且其名称包含2015
(且不以开头.
),则外壳程序将扩展*2015*
为这些文件名列表,然后传递该列表作为的参数find
。这不是您想要的-相反,您想直接将其*2015*
作为要查找的参数传递,以便find
而不是shell可以找到与之匹配的文件。
要解决该问题,请引用*2015*
。有三种常见的方法可以做到这一点:
'*2015*'
(即find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;
)
"*2015*"
(即find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;
)
\*2015\*
(即find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;
)
我建议将单引号写为'*2015*'
,因为:
但是在这种情况下,这并不重要。'
和"
两个治疗*
相同,表达不足够复杂\
引用,使之很难理解。
2. -mtime +1
仅选择两天或更早之前修改的文件。
如上man find
所说:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
假设文件在47小时前被修改。为了弄清楚有多少个24小时周期也就是find
回合下来:它是一个 24小时前。但是-mtime +1
仅匹配修改时间严格超过 24小时前的文件。因此,昨天的文件不匹配。
请参见为什么查找-mtime +1仅返回早于2天的文件?有关更多信息,请参见steeldriver建议。
要查找的文件随时超过24小时前最后一次修改,我建议,而不是规定它作为1440分钟前有-mmin +1440
:
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
一些读者可能想知道为什么我没有报价{}
。有人引用{}
来提醒人类,这不是支架扩张的一种表达。伯恩式炮弹(如bash的)不要求{}
与里面什么都没有被引用。也许某些非伯恩风格的外壳确实对其进行了特殊处理;这可能就是为什么某些用户引用它的原因。但是也有一个误解,即有时必须引用,{}
以便-exec
正确处理带有空格的文件名。那是错误的:使用{}
或'{}'
,find
得到相同的参数,因为外壳在传递给之前会删除引号'{}'
find
。为了消除这种误解,我不引用{}
,但这只是样式问题-如果您{}
想记录一下shell是如何处理的{
,那么}
特别好。
我建议您也更改ls
命令,或者(如muru所建议)将其替换为find
的-ls
操作。ls -ltrh
可能没有按照您的预期做,因为它针对找到的每个文件单独运行,因此指定排序的-t
and -r
标志无关紧要。
尽管输出的格式与ls -l
使用时会有所不同,但使用起来-ls
更简单。
find . -name '*2015*' -mmin +1440 -ls
或者,如果您确定只需要列出文件名(包括它们相对于的路径.
),则可以不指定任何操作,从而使用默认-print
操作:
find . -name '*2015*' -mmin +1440
find
部分对我来说看起来不错,但我在-exec
参数方面也遇到了问题。我也无法正常工作。(我试图通过它将所有jpg文件从一个文件夹移动到其父目录-并最终手动完成了...)