gpt4 book ai didi

linux - 从不断更新的目录中读取更新

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

我正在编写一个 bash 脚本,它查看目录中的每个文件并对其执行某种操作。它应该看起来像这样(也许?)。

for file in "$dir"* ; do
something
done

很酷吧?问题是,这个目录经常更新(使用新文件)。无法保证在某些时候,我会技术上完成目录中的所有文件(因此退出 for 循环),但实际上并没有完成向目录提供额外文件。不能保证我将永远完成提供目录的工作(好吧...对此持保留态度)。

我不想多次处理同一个文件。

我正在考虑制作一个永远运行的 while 循环并不断更新一些文件列表 A,同时制作另一个文件列表 B 来跟踪我已经处理的所有文件,以及文件列表 A 中的第一个文件不在文件列表 B 中的文件得到处理。

有没有更好的方法?这种方法甚至有效吗?谢谢

编辑:强制“我是 bash 新手”

最佳答案

@Barmar 有一个很好的建议。处理此问题的一种方法是使用 inotify 来监视新文件。安装 inotify-tools 后在您的系统上,您可以使用 inotifywait 命令将新文件事件馈送到循环中。

您可以从以下内容开始:

inotifywait -m -e MOVED_TO,CLOSED_WRITE myfolder |
while read dir events file, do
echo "Processing file $file"
...do something with $dir/$file...
mv $dir/$file /some/place/for/processed/files
done

inotifywait 命令将为 (a) 移动到目录中的文件和 (b) 为写入而打开后关闭的文件生成事件。这通常可以满足您的需求,但总有一些极端情况取决于您的特定应用。

inotifywait 的输出类似于:

tmp/work/ CLOSE_WRITE,CLOSE file1
tmp/work/ MOVED_TO file2

关于linux - 从不断更新的目录中读取更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937515/

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