列出所有最近更改的文件(递归)


21

因此,我想显示(ls例如,通过)最近七天更改的所有文件。如果我在docroot文件夹中,则它应该可以看起来更“深”。

例如:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

因此,ls(或任何合适的)应该输出myfile1和(如果可能) MySub/sub1

使用一个命令可以做到吗?

Answers:


39

当然。从您所在的目录中执行:

find . -type f -mtime -7 -exec ls -l {} \; 

向它添加重定向(也> results.txt就是将它们存储到该文件中)。

  • type f 只执行文件而不执行目录
  • mtime -7 直到现在7天前(+7比“ 7天还早”)
  • 然后将其输入ls以显示长列表

您也可以ls -l参与其中:

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

将显示树状方法,目录位于长列表(1)或短列表(2)中的文件之间。


4
findls选择,所以您可以做find . -type f -mtime -7 -ls
heemayl 2015年

当然可以,但这会使它更加通用(我使用此方法查找需要删除的文件,并可以更改该命令来执行此操作:))
Rinzwind 2015年

3
同样,使用更有效的find ... -exec ls -l {} +执行方式(ls -l使用多个参数的次数更少)也更合适。这是findPOSIX指定的标准选项。
pabouk 2015年

5

zsh

ls -l **/*(.m-7)
  • **/* 将从当前目录开始递归查找文件

  • (.m-7)是glob限定符,其中.表示常规文件,m-7表示最近7天内被修改的文件


2

以下命令在Mac OSX上可以实现梦想-也许在ubuntu上也可以实现……

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

这将在当前目录树中查找最近7天内已修改的文件,并输出修改日期+时间和路径,排在最前。

输出示例:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

感谢ubuntu用户的任何反馈。


在Mac上,唯一对我有效的解决方案。谢谢!
artnikpro

您的欢迎@artnikpro!
MrWatson

1

要求的不完全是...但更容易记住...

ls -alRt docroot

要么

ls -alRt /path/to/top/level/directory

0

7天,即60秒* 60分钟* 24小时* 7天= 604800秒

找出以秒为单位的当前日期(Unix纪元时间):

$ date +%s
1448876323

减去以秒为单位的7天:

expr $(date +%s) - 604800
1448271548

现在,以stat“名称+时间(以秒为单位)”格式获取所有文件的命令并打印统计信息,并用于awk裁剪修改时间大于我们计算出的日期的那些文件

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

特别值得关注的是最后3个文件,因为我知道我不到7天就在使用它们。因此我知道它有效


2
请注意,可以代替awk '$2 > 1448271265 {print $0}'您直接说awk '$2 > 1448271265'。在真实情况下,awk将默认行打印为当前行。
fedorqui
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.