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

问题描述 投票:0回答:7

使用

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 

有没有办法结合这两个命令,以便列出目录和修改的日期时间?

linux command-line grep find gnu
7个回答
191
投票

接受的答案有效,但速度很慢。不需要对每个目录都执行 stat,find 提供了修改日期,直接打印出来即可。这是一个相当快的等效命令:

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

80
投票

您可以将

-exec
开关用于
find
,并使用
stat
开关定义
-c
的输出格式,如下所示:

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

这应该在输出的同一行给出文件名,后跟其修改时间。


28
投票

最新 GNU 版本的

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

如果您想要特定格式的日期,可以使用

%C
后跟字段字符。 例如,4 位数年份为
%CY
,其中
Y
是 4 位数年份的字符。
请注意,如果您需要多个字段,则需要多次指定
%C
。 例如,YYYY-MM-DD 格式看起来像
%CY-%Cm-%Cd

查看手册页或在线文档了解更多详细信息。

这是一个工作示例:

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

19
投票

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

这是一种让基本

ls
命令显示完整目录路径的方法。 虽然
ls
具有用于递归搜索的
-R
参数,但使用
-l
-o
选项(至少在 OSX 中),路径不会显示在结果中,例如:
ls -lR


10
投票

我用来打印昨天修改的文件的另一个。 ls -ltr 给我更详细的信息,比如修改时间、用户等

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

3
投票

尝试这条线:

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
....

0
投票

我发现这种格式的

-printf
是最好的:
%TF %TH:%TM:%.2TS %p\n

它以

YYYY-MM-DD
格式显示日期,然后以
HH:MM:SS
格式显示时间,然后是文件名和新行

例如,此命令仅显示自午夜以来修改的目录(通过

-newermt
开关):

find /var -maxdepth 2 -type d -newermt $(date +%Y-%m-%d) -printf '%TF %TH:%TM:%.2TS %p\n'

现在在我的机器上返回以下内容:

2024-07-24 01:05:00 /var/lib/vnstat
2024-07-24 00:39:29 /var/lib/snapd
2024-07-24 00:59:47 /var/lib/smartmontools
2024-07-24 00:38:40 /var/lib/logrotate
2024-07-24 00:38:40 /var/backups
2024-07-24 00:38:40 /var/cache/cups
2024-07-24 00:38:40 /var/log
2024-07-24 00:38:40 /var/log/cups
2024-07-24 00:39:20 /var/tmp
© www.soinside.com 2019 - 2024. All rights reserved.