如何列出文件名中带有“ 2015”的一天之前的文件?

ɑː

我想列出不属于今天的所有日志文件,仅列出2015其名称中包含的文件

这些是我尝试过的命令:

find . -name 2015 -mtime +1 -exec  ls -ltrh  {} \;
find . -name *2015* -mtime +1 -exec  ls -ltrh  {} \;

两者的输出都不是什么,但是文件仍然存在。这些命令出了些问题,但我没有得到什么。任何帮助,将不胜感激。

埃利亚·卡根(Eliah Kagan)

该命令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可能没有按照您的预期做,因为它针对找到的每个文件单独运行,因此指定排序-tand-r标志无关紧要。

尽管输出的格式与ls -l使用相比会有所不同,但使用起来-ls更简单。

find . -name '*2015*' -mmin +1440 -ls

或者,如果您确定只需要列出文件名(包括它们相对于的路径.),则可以简单地不指定任何操作,从而使用默认-print操作:

find . -name '*2015*' -mmin +1440

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何列出文件名中包含空格的文件?

如何列出文件夹中的文件名

如何使用angular js列出文件夹中的所有文件名

Gnu / Linux:在其他目录中列出文件,文件名中带有某些字符

列出文件名

如何让grep列出文件名之前的匹配计数?

在Powershell文件名中按日期列出文件

如何根据提供的模式列出文件夹中的文件名?

根据 hdfs 中的模式列出文件名

如何在 PHP 中從 dropbox 中列出文件名

如何通过xargs将ls传递到cat中,以便列出文件名?

如何在目录中的服务器上列出文件名?

如何列出系统中的所有文件名

如何在终端中列出所有文件名?

批处理文件;列出目录中的文件,仅列出文件名?

列出文件夹中的所有文件,并在每个文件名之间添加句子

如何使用find命令列出文件名而不列出路径?

svn export命令行从文件名或扩展名中带有通配符的Subversion导出文件

在文件名(模式)之后列出文件夹中的文件 - Linux

如何列出文件 - 按文件名和修改日期排序?

列出文件夹中相似文件名的数量

递归列出文件名中包含下划线的文件

linux ls命令列出文件名中包含某些字符的文件

如何隐藏FFMPEG视频中的输出文件名

如何在ffmpeg的输出文件名中包含输入文件名

如何以Unix find命令在Windows上列出文件名?

列出文件名而不显示父路径

在工作表中列出文件名和路径以获取特定的目录和字符数

'pdfseparate':将输出文件名格式设置为带有前导零的页码