操作系统:Linux
文件系统类型:ext3
首选解决方案:Bash(脚本/一行程序)、Ruby或Python
我有几个目录,其中有几个子目录和文件。我需要列出所有这些目录,其构造方式是将每个一级目录列在其中最新创建/修改文件的日期和时间旁边。
为了说明这一点,如果我接触一个文件或修改它的内容向下几级子目录,该时间戳应该显示在第一级目录名旁边。假设我有一个这样的目录:
./alfa/beta/gamma/example.txt
我修改了文件example.txt的内容,我需要在第一级目录alfa旁边以人类可读的形式显示时间,而不是epoch。我已经尝试了一些使用find, xargs, sort和类似的东西,但我不能绕过“alfa”的文件系统时间戳不改变的问题,当我创建/修改文件的几个级别。
对于那些面对的人
stat: unrecognized option: format
当执行Heppo的答案(查找$1 -type f -exec stat——format '%Y:% Y %n' "{}" \;| sort -nr | cut -d: -f2- | head)
请尝试使用-c键来替换——format,最后调用将是:
find $1 -type f -exec stat -c '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
这在一些Docker容器中为我工作,在那里stat不能使用——format选项。
对于简单的ls输出,使用这个。没有参数列表,所以它不能太长:
find . | while read FILE;do ls -d -l "$FILE";done
并以切割的方式将日期,时间和姓名进行了美化:
find . | while read FILE;do ls -d -l "$FILE";done | cut --complement -d ' ' -f 1-5
编辑:请注意,当前顶部的答案按修改日期排序。这里的第二个例子也很简单,因为修改日期在每行的第一个-在末尾添加一个排序:
find . | while read FILE;do ls -d -l "$FILE";done | cut --complement -d ' ' -f 1-5 | sort
这是我正在使用的(非常有效):
function find_last () { find "${1:-.}" -type f -printf '%TY-%Tm-%Td %TH:%TM %P\n' 2>/dev/null | sort | tail -n "${2:-10}"; }
优点:
不管扫描多少文件,它只生成3个进程
处理包含空格的文件名
适用于大量文件
用法:
find_last [dir [number]]
地点:
目录-要搜索的目录[当前目录]
Number -显示[10]的最新文件数
find_last /etc 4的输出如下所示:
2019-07-09 12:12 cups/printers.conf
2019-07-09 14:20 salt/minion.d/_schedule.conf
2019-07-09 14:31 network/interfaces
2019-07-09 14:41 environment