提问人:SirLouen 提问时间:8/2/2023 最后编辑:SirLouen 更新时间:8/2/2023 访问量:72
获取最新创建的文件的文件名
Get the filename of the latest file created
问:
我想知道是否可以获取在目录上创建的最新文件的文件名,但要检查该文件名是否是在特定时间后创建的
不确定是否有命令可以先获取创建严格最新的文件名,然后获取创建时间与特定时间进行比较
操作系统: Ubuntu/Linux
答:
0赞
SirLouen
8/2/2023
#1
由于一些评论,我提出了解决方案,与 22 小时/晚上 10 点相比
#!/bin/bash
FILENAME=$(ls -tr | tail -1)
FILECREATEDATE=$(stat -c %Y "$FILENAME")
TODAY22H=$(date -d "$(date +%Y-%m-%d) 22:00:00" +%s)
if (( FILECREATEDATE >= TODAY22H )); then
echo "yes"
else
echo "no"
fi
不过,我更喜欢一个选项,而不是因为它可以处理更好的非字母数字文件名(也许这是不可能的,所以我会坚持使用 ls)find
ls
find . -type f -printf '%T@ %p\n' | sort -n | tail -1
但是我看到文件名前面的时间(用于排序)
评论
0赞
user1934428
8/2/2023
代码中没有任何内容可以查询创建日期。 查询修改时间(自纪元以来的秒数)。例如,每次对该文件执行 时,修改时间都会更新。%Y
touch
0赞
user1934428
8/2/2023
也许查询 inode 更改时间 () 会更有意义?它不受命令的影响。%Z
touch
0赞
Barmar
8/2/2023
@user1934428 但它受到诸如 之类的东西的影响,这更不像是创造。出于许多目的,修改是他们真正想要的,因为它实际上是在创建文件的新版本。使用旨在使它看起来像是创建了一个新版本。chmod
touch
0赞
user1934428
8/3/2023
@Barmar:chmod 如何影响 inode 更改时间?它不会将文件重新分配到其他位置,是吗?IMO,问题本身有点不清楚。OP 应该从一开始就声明,他对文件的修改时间感兴趣,这对于实际目的来说确实足够好。我在 Windows 中遇到的一个问题是,在某些情况下,如果打开网络共享上的文件进行读取,则修改时间会更新。OP 正在使用 WSL - 也许他面临类似的问题?
0赞
Barmar
8/3/2023
@user1934428权限存储在 inode 中,因此更改它们会更改 inode 并更新时间。试试看。
评论
ls -t | tail -1
将打印最新文件。birth
stat filename
Birth
Birth
Birth
stat -c '%W - %n'
generating more conflict