查找命令无法复制几个文件

查找命令无法复制几个文件

我正在使用下面的命令来复制最后一分钟创建的文件。我安排包含此命令的脚本每一分钟运行一次,以便在 a/b/c 位置创建文件后立即复制文件。但是,不知何故,此命令有时无法复制一个或多个文件。 find 命令有什么缺点吗?或者以下命令有错误吗?

find /a/b/c -type f -mmin -1 -exec cp {} /x/y/z \;

答案1

您可以使用find时间戳标志,以便它获取自上次运行以来的所有文件,无论那是多久前的事。请随意$trigger用更合适的内容替换 的定义。

trigger=/tmp/trigger

touch "$trigger.new"
test ! -f "$trigger" && touch "$trigger"

find /a/b/c -newer "$trigger" -type f -exec cp -f {} /x/y/z +
mv -f "$trigger.new" "$trigger"

在以下情况下这仍然会失败时间文件完全写入后重置。

如果此代码运行时正在写入源文件,它仍然会失败。除非您能保证源文件以原子方式出现,否则非常值得防范这种情况。处理此问题的一种方法是使用.tmp(或)后缀写入文件.part,并仅在完成后由发件人重命名。find此处的触发脚本将被修改为排除名称以 (或 ) 结尾的.tmp文件.part

您也可以使用rsync,但请注意源中的目录路径将被复制到目标,这可能不是您想要的。将上面的代码片段替换为这一行:

rsync -a /a/b/c/ /x/y/z/

相关内容