gpt4 book ai didi

linux - BASH:如何检测最后进入目录的文件? (不是时间戳)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:45 25 4
gpt4 key购买 nike

我的问题是如何检测最后进入目录的文件。 (不带创建/修改时间戳)

用例:我的脚本必须使用已从备份恢复的文件。 (如果相关,恢复过程大约需要 10 分钟)。但是这个文件不一定是目录中的最新文件。例如:

-rw-rw-r--. 1   user user    670660 Oct 25 09:21    file1
-rw-r--r--. 1 user user 0 Oct 29 11:00 file3
-r--r--r--. 1 user user 37031332 Oct 29 11:56 file4 # <--the LATEST file
-rw-r--r--. 1 user user 0 Oct 30 12:00 file5
-rwx------. 1 user user 6980628 Oct 31 12:47 file6

目录中可能已经存在相同的文件,并且已被覆盖。我正在寻找的解决方案也应该检测到这种情况。

附言- 时间戳选项总是带我到最新的(或最后修改的)文件。不是我的情况。谢谢。

最佳答案

如果您不必事后确定进入目录的最后一个文件,但可以连续监视目录,则可以使用 Linux 内核的 inotify API,以及 inotifywait inotify-tools 中的工具。

在您的情况下,您需要监视 moved_tocreated 事件:

inotifywait -q -m -e moved_to -e create --format %f /path/to/dir | 
while IFS= read -r file; do
echo "last file that entered dir: $file"
done

如果你可以用一些设置和拆卸代码包装你的备份恢复过程,你可以在备份恢复之前用inotifywait开始监控目标目录,然后停止& 恢复完成后读取进入目标的最后一个文件。

一个简单的演示,其中备份还原被手动创建文件所取代:

#!/bin/bash
# target dir, assuming it exists
dir=/tmp/bucket

# setup $dir monitoring in background
list=$(mktemp)
coproc inotifywait -q -m -e moved_to -e create --format %f "$dir" >"$list"

# kill the monitor on backup restore done, and/or on script exit
wrapup() {
[[ $COPROC_PID ]] && kill -INT "$COPROC_PID" && last=$(tail -n1 "$list") && rm "$list"
}
trap 'wrapup' USR1 EXIT

# simulated "restore from backup" to $dir
rm -f "$dir/xyz"; touch "$dir/xyz"

# kill the monitor, read the last file, and clean-up
kill -USR1 $$

# do something with that last file
echo "Last file in $dir was $last"

关于linux - BASH:如何检测最后进入目录的文件? (不是时间戳),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com