我正在寻找参数ls
或等效参数,它们对指定的目录执行以下操作:
对于每个子目录:
- 递归地查看其包含的每个文件和目录。
- 查找更新/修改日期最近的文件或目录。
- 显示此递归更新日期。
- 或者,按此递归更新日期排序。
据我所知,常规ls -lArt
命令仅查看文件夹本身的更新日期,而不查看文件夹内容。
因此,我正在寻找du -hs * | sort -h
与文件大小相当的东西。
例子
考虑以下目录结构。
- dir
- subdir1: last udpated 2013-07-07
- subdir1a: last updated 2012-01-01
* file1a1.txt last updated 2016-02-22
* file1b.txt: last updated 2016-01-06
* file1c.txt: last updated 2015-12-30
- subdir2: last updated 2016-03-10
* file2a.txt: last updated 2016-02-04
* file3.txt: last updated 2014-02-13
(sorted)的输出ls-special dir
如下:
file3.txt: last updated 2014-02-13
subdir1: last updated 2016-02-22
subdir2: last updated 2016-03-10
答案1
你需要:
find . -type d -exec sh -c 'echo -n {}; cd "{}"; ls -ltd * | grep -v ^d | head -n 1 | awk "{\$1=\$2=\$3=\$4=\$5=\$6=\$7=\$8=\"\"; print \$0}"; echo"" ' \;
其作用:首先找到起始目录的所有子目录,然后执行以下-exec
部分:
echo -n {}; cd "{}"; ls -ltd * | grep -v ^d | head -n 1 | awk "{\$1=\$2=\$3=\$4=\$5=\$6=\$7=\$8=\"\"; print \$0}"; echo""
这将生成一个新的 shell(每个子目录一个),打印子目录的名称,进入该目录,按访问时间排序(-t
)所有内容(IE,文件和目录)以长格式(-l
)呈现,而无需展开目录的内容(-d
)。需要使用长格式,以便我们可以剔除目录( ),只取最近访问的grep -v ^d
第一行输出( )head -n 1
文件,然后(awk
)我们只打印它的名称(而不是所有其他参数),记住它的名称可能包含空格:最后,它打印一个换行符,以便目录不内容不会与下一个内容混淆。
请记住,没有办法区分公平处理修改时间。
答案2
以下命令列出当前树的所有文件(.),最新文件显示最后:
find . -type f -printf "%T@ %p\n" | sort -n | awk '{print $2}' | xargs ls -lart