我有一个脚本来检查在运行之前传输文件,但即使我知道存在传输文件的事实它也会运行。似乎'cmp'操作无法正常工作。我需要确保在完成传输之前我没有抓取任何文件。代码如下:
different=1
compare1=~/Desktop/$$-testing1.txt
compare2=~/Desktop/$$-testing2.txt
waittime=10s
DATE=$(date +%Y%m%d)
PRO="/Volumes/pubfiles/ConversionRequests/Processed"
DATEI=$(date +-%m-%d-%Y)
cd $PRO/Processed$DATEI
echo Checking if files are in process in ${PWD}...
while [ $different -eq 1 ]; do
ls -la@ 1> $compare1
sleep $waittime
ls -la@ 1> $compare2
if cmp $compare1 $compare2 ; then
echo Files have not changed in $waittime. Continuing...
different=0
else
echo Files are still being transferred. Waiting $waittime...
fi
done
rm $compare1
rm $compare2
答案 0 :(得分:3)
您的方法可能无效。要确保您没有读取其他进程当前正在编写的文件,请让进程使用临时名称编写该文件。完成后,让它重命名文件。
然后你可以简单地忽略临时文件名。
如果您使用自制脚本来传输文件,请使用rsync(1)
等适当的转移工具替换它。
如果您使用的是商业产品,请提交错误消息。如果他们拒绝修理它,那么他们可能不知道他们在做什么 - 找到更好的产品。
答案 1 :(得分:0)
变化:
ls -la
为:
du -sk
似乎问题是ls -la
只列出存在的目录而不是它们各自的大小(以字节为单位),因此cmp文件将始终相同。使用:
du -sk
你得到了目录的大小,而while循环将继续正常。