gpt4 book ai didi

linux - 如何仅使用默认工具监视 linux redhat 目录中的新文件(创建/移动)?

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:52 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本将从特定目录中获取文件并将它们复制到 Linux redhat 服务器上的另一个目录中。相关文件的名称为 abc###.doc,其中“#”代表一个数字。每当在此目录中移动或创建新文件并具有名称时,我希望该文件立即复制到另一个目录。例如,假设该目录已包含这些文件:

abc001.doc
abc002.doc
abc003.doc

然后添加了一个新文件,现在看起来是这样的:

abc001.doc
abc002.doc
abc003.doc
abc004.doc

我只想复制 abc004.doc 文件。然后,如果再添​​加两个文件,如abc005.doc和abc006.doc,那么这两个文件也会被复制,而不会复制前面的四个文件。

当试图找出解决方案时,我首先看到的是inotifywait。但是,这需要我们在linux服务器上安装它。不幸的是,由于我们环境中的安全设置,我们无法这样做。

我还看到了一个使用 python 的有趣方法:https://askubuntu.com/questions/893019/monitor-folder-and-run-command-if-there-is-a-file-there .但是,这个问题是它会在其中查找任何文件并移动它们。对于我的具体问题,文件不会从该目录中移动,而是被复制。因此,它将复制 abc###.doc 格式的所有文件,而不仅仅是新文件。

我唯一能想到做的另一件事是可能有一个已经处理过的文件名列表,并在新文件进入和处理时添加到该列表中。但肯定有更优雅的方法来解决我的问题......

Linux 中是否已经有任何其他工具可以用来解决这个问题?

最佳答案

inotify 在大多数 Linux 系统上是相当标准的。该接口(interface)由内核提供。如果系统上有一个标准的 C 编译器,您可以很容易地构建一个工具。许多解释器(perl、python、php-cli...)和 Mono 也有接口(interface)。似乎没有用于从 shell 创建 inotify watch 的直接界面。

如果您没有使用 inotify 的工具,您将别无选择,只能进行轮询。可以容忍的延迟时间越长越好。您可以使用“标准工具”stat 查看上次修改目录的时间并对其进行跟踪,还可以使用“标准工具”find 查看内容文件在更改时已更改。

inotify 无疑是首选,因为它只会用 read(2) 阻塞脚本,直到做出更改并立即采取行动。在我知道有哪些工具可用之前,我无法为您提供使用它的解决方案。

非inotify解决方案如下:

#!/bin/bash

export SourceDir="/whatever"
export DestDir="/whatever else"

# assume that everything is in sync as of now
# we could save/load last_mtime in a file if this is a bad assumption
last_mtime=`stat "${SourceDir}" -c %Y`
while true; do
new_mtime=`stat "${SourceDir}" -c %Y`
if (( ${new_mtime} > ${last_mtime} )); then
ls "${SourceDir}" | while read filename ; do
if [ -f "${filename}" ]; then
file_mtime=`stat "${filename}" -c %Y`
if (( ${file_mtime} > ${last_mtime} )); then
cp "${SourceDir}/${filename}" "${DestDir}"
fi
fi
done
export last_mtime=${new_mtime}
fi
# wait 5 seconds before we check again
sleep 5
done

您必须不断地在后台运行脚本(可能以 nohup 或其他方式开始)。如果您可以忍受 1 分钟或更长时间的延迟,您可以去掉 while 循环并休眠并使用 cron 运行它(假设您的“标准工具”中有 cron)或者甚至只使用 cron 和 rsync(假设你有 rsync)并且没有额外的脚本。

关于linux - 如何仅使用默认工具监视 linux redhat 目录中的新文件(创建/移动)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54335075/

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