获取最新创建的文件的文件名

Get the filename of the latest file created

提问人:SirLouen 提问时间:8/2/2023 最后编辑:SirLouen 更新时间:8/2/2023 访问量:72

问:

我想知道是否可以获取在目录上创建的最新文件的文件名,但要检查该文件名是否是在特定时间后创建的

不确定是否有命令可以先获取创建严格最新的文件名,然后获取创建时间与特定时间进行比较

操作系统: Ubuntu/Linux

bash 文件

评论

3赞 Barmar 8/2/2023
ls -t | tail -1将打印最新文件。
2赞 Barmar 8/2/2023
请注意,这使用修改时间。Unix 文件系统必须不存储创建时间吗?
0赞 SirLouen 8/2/2023
我认为这可能更可行,但第二部分是产生更多冲突的那部分
2赞 markp-fuso 8/2/2023
第一:确定您的文件系统是否保留了文件创建(又名)日期(例如,输出是否显示标记为 datetime 戳?第二:如果您确实看到 ,并且您可以确认 == 创建,那么请考虑将所有日期时间(文件/出生,截止时间)转换为自纪元以来的秒数(例如,),然后......第 3 个:按纪元秒对列表进行排序,并选择大于截止纪元的最大/最大纪元birthstat filenameBirthBirthBirthstat -c '%W - %n'
0赞 phuclv 8/2/2023
你说的是什么意思?generating more conflict

答:

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)findls

find . -type f -printf '%T@ %p\n' | sort -n | tail -1

但是我看到文件名前面的时间(用于排序)

评论

0赞 user1934428 8/2/2023
代码中没有任何内容可以查询创建日期。 查询修改时间(自纪元以来的秒数)。例如,每次对该文件执行 时,修改时间都会更新。%Ytouch
0赞 user1934428 8/2/2023
也许查询 inode 更改时间 () 会更有意义?它不受命令的影响。%Ztouch
0赞 Barmar 8/2/2023
@user1934428 但它受到诸如 之类的东西的影响,这更不像是创造。出于许多目的,修改是他们真正想要的,因为它实际上是在创建文件的新版本。使用旨在使它看起来像是创建了一个新版本。chmodtouch
0赞 user1934428 8/3/2023
@Barmar:chmod 如何影响 inode 更改时间?它不会将文件重新分配到其他位置,是吗?IMO,问题本身有点不清楚。OP 应该从一开始就声明,他对文件的修改时间感兴趣,这对于实际目的来说确实足够好。我在 Windows 中遇到的一个问题是,在某些情况下,如果打开网络共享上的文件进行读取,则修改时间会更新。OP 正在使用 WSL - 也许他面临类似的问题?
0赞 Barmar 8/3/2023
@user1934428权限存储在 inode 中,因此更改它们会更改 inode 并更新时间。试试看。