如何获取目录或其子目录中任何文件上次更改的时间?例如
Dir - changed 1/1/1
Sub Dir 1 - changed 2/1/1
Sub Dir 2 - changed 3/1/1
File 1 - changed 10/1/1
File 2 - change 5/1/1
此命令的输出Dir
应为 10/1/1(File 1
是最后修改的文件名)。获取最后修改的文件名是一个额外好处,但不是必需的。
答案1
find <dir> -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1
返回以下形式的行:
<seconds since epoch[1]><tab><filename>
别名或放入像以下示例中的脚本来打印文件名或日期。
让我们创建一个测试树:
$ date -u; mkdir -p a/{b,c,d}/{e,f,g}
Sat May 28 17:37:52 UTC 2011
$ date -u; touch a/{b,c,d}/{e,f,g}/{foo,bar,baz}; sleep 1; date -u; touch a/c/f/bar
Sat May 28 17:38:17 UTC 2011
Sat May 28 17:38:18 UTC 2011
获取日期a
:
$ date -ud @$(find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
Sat May 28 17:38:18 UTC 2011
获取文件路径:
$ find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f2
a/c/f/bar
[1]:参见Unix 时间在 Wikipedia 上查看“Unix 纪元”的解释。
脚本示例:
#!/bin/sh
if test ! -d "${1:-.}"
then
echo not a directory: ${1:-.} >&2
exit 1
fi
date -d @$(find "${1:-.}" -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
调用时带或不带<dir>
参数。如果不带参数,它将使用当前目录。
答案2
我使用 FAR Manager 做了类似的事情,应该可以解决你的问题:
FAR 管理器(免费、开源)
http://www.farmanager.com/
以下是我的做法:
- 导航到我想要开始搜索的目录
- 按 Alt-F7(调出搜索对话框)
- 搜索
*.*
(所有文件) - 搜索完成后选择“面板”
- 按 F9,然后按 L,再按 L 显示完整文件列表详细信息
- 按 CTRL-F5 按修改时间戳对所有内容进行排序
“面板”将所有搜索结果放在一个可排序的长列表中。您还可以使用其他排序选项(按住 CTRL 键将在屏幕底部显示这些选项),再次按下相同的排序组合键将导致排序以相反的方向进行(您可以通过这种方式在升序和降序之间不断切换)。
尽管目录本身可能没有最新的时间戳,但至少您可以通过这种方式找到最新的文件,然后您将在列表中看到完整路径。希望这能帮助您获得所需的信息?
答案3
在 DOS 中,此命令可能适合您,尽管由于 DOS 的 DIR 命令的固有限制而并不完美:
- 方向 /A/OD/S/TW
/TW 开关对您来说是最有趣的,因为它的意思是“显示最后写入日期”(这是我用“DIR /?”找到的最接近最后修改日期的开关)。
/OD 开关使输出按日期排序。DIR 命令应该会发现您正在使用 /TW 开关,并自动按此日期排序。
/S 开关允许在子目录中进行递归搜索。
/A 开关包括所有类型的文件,包括隐藏文件。如果您不想包括隐藏文件[和其他此类文件],请忽略此开关。