【发布时间】:2022-01-27 20:00:09
【问题描述】:
我正在使用计划的 bash 脚本(每分钟执行一次 bash 脚本)查看我的 Synology 上的一个文件夹,所有扫描的文档都将被删除。我的想法是将它们移动到两个地方,一个是无纸化文件夹和一个未排序的文件夹,这样我可以手动将它们移动到正确的文件夹。
#!/bin/bash
dpath=/volume1/scanned/*
for FILE in $dpath
do
if [[ -f $FILE ]]
then
cp $FILE /volume1/unsorted_documents/
mv $FILE /volume1/docker/paperless/consume/
else
echo “There are no files in the given path.”
fi
done
此脚本在大多数情况下最终导致文档损坏。我的想法是在执行移动命令之前它还没有完成复制。
有没有办法在执行移动之前确保复制完成?或者其他更好的解决方案?
【问题讨论】:
-
损坏了怎么办?您的文件名是否包含空格?
-
@BenjaminW。已损坏,好像复制的 pdf 文件无法再打开一样。移动的文件似乎很好
-
是的,听起来您在完成下载之前正在处理文件;如果源无法生成辅助文件(例如,
downloaded.file.DONE- 您只处理存在关联.DONE的文件),那么另一个选项是检查大小(wc -c),等待 n 秒,看看是否尺寸发生了变化;一种变化是记下每个文件的当前大小,将详细信息写入文件并在下一个脚本运行时,如果文件的大小没有改变(从上次脚本运行开始),然后处理它并从文件中删除(文件名列表和尺寸)... -
由于您的脚本每分钟都在运行,我假设您无需“急于”处理文件,您可以多等一分钟以验证其大小没有变化
-
cp在mv运行之前完成,但是您的脚本是否可能在一分钟内没有完成,这意味着您的脚本的第二个实例在前一个完成之前启动?跨度>