如何使用“查找”命令显示修改的日期时间?


80

使用find命令,我可以显示具有多个级别的目录名称。以下命令显示/var路径下深度为2的所有目录:

find /var -maxdepth 2 -type d;

结果显示:

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

使用stat命令,我可以找到修改后的日期时间:

stat /var/log/samba | grep 'Modify:'

结果是:

Modify: 2014-01-02 11:21:27.762346214 -0800 

有没有一种方法可以结合使用这两个命令,以便使用修改的日期时间列出目录?

Answers:


61

您可以使用-exec的开关find和定义的输出格式stat使用-c如下开关:

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

这应该在输出的同一行中给文件名加上修改时间。


它比我的回答更好,+1
肯特

-printf下面的选项避免调用stat找到的每个文件。在我的测试中,该命令产生几乎相同的输出,仅几秒钟就增加了一位数字的精度。
mwfearnley

适用于MacOS格式ARG字符stat-ffind /var -maxdepth 2 -type d -exec stat -f "%t%Sm %N" {} \;
toddcscar

121

可接受的答案有效,但是速度很慢。无需为每个目录执行exec stat,find提供了修改日期,您可以直接将其打印出来。这是一条等效的命令,速度要快得多:

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"

4
更好的解决方案。它也可以与find缺少stat命令的Windows上运行的from msys一起使用。
Snorfalorpagus

7
在Macs上,“ brew install findutils”,然后gfind具有-printf选项。
WeakPointer

%Tc打印“语言环境的日期和时间”,允许格式字符串“%p%Tc”
Andreas

更多有用的链接,用于%格式化程序的解释。unix.stackexchange.com/a/215236/216480或在手册页上搜索“ -printf格式”
样式

1
格式字符串“%p%Tc”起作用时,其格式输出略有不同。例如,“ / var / spool 2014年9月29日星期一09:05:54 BST”,而不是“ / var / spool 2014-09-29 09:05:54.000000000 +0100”。
沙皇

15

find /var -maxdepth 2 -type d | xargs ls -oAHd

这是获取基本ls命令以显示完整目录路径的一种方法。虽然ls具有-R用于递归搜索的参数,但路径不会显示在带有-l-o选项的结果中(至少在OSX中是这样),例如带有的ls -lR


请添加解释为什么这可以回答问题。通常,每当您在StackOverflow的答案中发布示例代码时,通常都会一直在为其提供解释。否则,由于主持人篇幅短且缺乏解释,主持人将您的答案删除为低质量答案。
sideshowbarker

3
您可以用find /var -maxdepth 2 -type d -ls简单的方法实现这一目标。
Grzegorz Krauze

11

最新的GNU版本find还包括一个-printf包含日期字段的选项。如果您需要以标准的“ C”格式打印文件名和修改时间,则可以使用-printf "%c %p\n"

如果您希望日期采用特定格式,则可以使用,%C后跟一个字段字符。例如,4位数字的年份为%CY,其中Y4位数字的年份为字符。
请注意,如果需要多个字段,则需要指定%C多次。例如,YYYY-MM-DD格式如下所示%CY-%Cm-%Cd

检查手册页或在线文档以获取更多详细信息。

这是一个工作示例:

find . -name favicon.ico -printf "%c %p\n"

7

最后一天,我用它来打印修改过的文件。ls -ltr给我更详细的信息,例如修改时间,用户等

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 

1
这是最简单,最容易记住和最快键入的。(我在不使用-mtime和-type args的情况下使用它,而是使用了-name '*.ext'规范。ls -lt对修改时间进行排序。)
Brent Faust

当文件名包含空格时,这不起作用。更好的方法是使用-print0而不是-print然后使用xargs -0代替xargs
emk2203 '19

1

试试这一行:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

在这里我运行它,它输出:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.