在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
在进行递归调用时,ls似乎没有正确地对文件进行排序:
ls -altR . | head -n 3
如何在目录(包括子目录)中找到最近修改的文件?
当前回答
显示带有人类可读时间戳的最新文件:
find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n1
结果如下所示:
2015-10-06 11:30: +0200 ./foo/bar.txt
若要显示更多文件,请将-n1替换为更高的数字
其他回答
在使用基于查找的解决方案多年之后,我发现自己希望能够排除像.git这样的目录。
我改用了这个基于rsync的解决方案。把这个放到~/bin/findlatest中:
#!/bin/sh
# Finds most recently modified files.
rsync -rL --list-only "$@" | grep -v '^d' | sort -k3,4r | head -5
现在是findlatest。将列出最近修改的5个文件,并查找latest—exclude .git。将列出。git中不包括的5个。
这是通过利用一些很少使用的rsync功能来实现的:“如果一个单一的源参数被指定为[rsync]而没有目的地,那么文件将以类似于ls -l的输出格式列出”(rsync手册页)。
与基于rsync的备份工具结合使用时,接受rsync参数的能力非常有用。例如,我使用rsnapshot,我用rsnapshot.conf行备份一个应用程序目录:
backup /var/atlassian/application-data/jira/current/ home +rsync_long_args=--archive --filter="merge /opt/atlassian/jira/current/backups/rsync-excludes"
rsync- excluded列出了我不想备份的目录:
- log/
- logs/
- analytics-logs/
- tmp/
- monitor/*.rrd4j
我现在可以看到最新的文件,将备份:
findlatest /var/atlassian/application-data/jira/current/ --filter="merge /opt/atlassian/jira/current/backups/rsync-excludes"
这似乎工作得很好,即使是子目录:
find . -type f | xargs ls -ltr | tail -n 1
如果文件太多,细化查找。
find . -type f -printf '%T@ %p\n' \
| sort -n | tail -1 | cut -f2- -d" "
对于一棵巨大的树,排序可能很难把所有东西都保存在内存中。
%T@像unix时间戳一样给出修改时间,sort -n按数字排序,tail -1取最后一行(最高时间戳),cut -f2 -d" "从输出中删除第一个字段(时间戳)。
编辑:就像-printf可能只在gnu中使用一样,ajreal中stat -c的使用也是如此。虽然在BSD上也可以做同样的事情,但格式化的选项是不同的(-f "%m %N"似乎是这样)
我错过了复数的部分;如果你想要更多的最新文件,只需要增加tail参数。
这个简单的cli也可以工作:
ls -1t | head -1
您可以将-1更改为您想要列出的文件数量
我费了好大劲才找到Solaris 10下最后一个修改过的文件。find没有printf选项,stat不可用。我发现下面这个方法对我来说很管用:
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7 }' | sort | tail -1
要显示文件名,请使用
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7," ",$9 }' | sort | tail -1
解释
找到。-type f查找并列出所有文件 sed的s /。*/"&"/'将路径名用引号括起来以处理空白 xargs ls -E将带引号的路径发送到ls, -E选项确保返回完整的时间戳(格式为年-月-日小时-分-秒-纳秒) Awk '{print $6," ",$7}'只提取日期和时间 Awk '{print $6," ",$7," ",$9}'提取日期,时间和文件名 Sort返回按日期排序的文件 Tail -1只返回最后修改的文件