我使用ls -t * | head -n1
(在OS X bash shell中)来识别工作目录中最近修改过的文件。如何编写命令以遍历子目录?我正在寻找的是工作目录中任何地方的最后修改过的文件,包括在子目录中。
帖子How can I list (ls) the 5 last modified files in a directory?和其他类似帖子没有解决子目录的迭代问题 - 这是我在这里要解决的具体问题。
答案 0 :(得分:0)
尝试ls -ltR --time-style=+%s DIRECTORY_HERE/ | grep -oP " [0-9]{10}[ ].*$" | sort -r | cut -c 13- | head -n1
打破它,命令说:
ls -ltR --time-style=+%s DIRECTORY_HERE/
递归列出所有文件和文件夹,以及时间和其他信息。将时间列为UNIX时间戳。
grep -oP " [0-9]{10}[ ].*$"
将结果输入grep,并使grep匹配并仅打印文件名和UNIX时间戳。请注意,这不适用于具有10个连续数字的文件名
sort -r
反向排序文件列表。由于UNIX时间戳是每一行的第一部分,因此它将首先排序最近。
cut -c 13-
仅保留文件名(剪下时间戳和换行符)。
head -n1
打印第一个(最近的)文件名
答案 1 :(得分:0)
为什么不find
?
find -printf "%T@ %p\n" | sort -n | tail -1
查找当前目录和子目录中的所有文件,并为每个文件打印两个字段
%T@
文件的最后修改时间(以秒为单位),小数部分
%p
文件名
第一个字段的数字排序
最后一条记录将是最新修改的文件。
答案 2 :(得分:0)
您可能希望使用ls -ltr
通过修改 t ime以 r 的顺序列出文件( l ong列表格式)和tail -1
仅打印最后一行输出。
ls -ltr | tail -1
或ls -1tr
只打印一列输出。
ls -1tr | tail -1
我建议使用r
选项(即"按相反顺序")因为如果要列出大量文件,则最有可能希望在底部看到最近修改过的文件而不是在屏幕的顶部。
在当前工作目录中递归搜索:
find . -maxdepth 1 -type d -exec ls -ltr {} +
或只是
ls -lrtR
仅获取目录名称和最近修改过的文件:
find . maxdepth 1 -type d | while read PATH; do
printf "%s: %s\n" ${PATH} $(ls -1tr | tail -1)
done