使用cmp检查传输的文件是否正常工作

时间:2014-02-24 15:59:20

标签: bash

我有一个脚本来检查在运行之前传输文件,但即使我知道存在传输文件的事实它也会运行。似乎'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

2 个答案:

答案 0 :(得分:3)

您的方法可能无效。要确保您没有读取其他进程当前正在编写的文件,请让进程使用临时名称编写该文件。完成后,让它重命名文件。

然后你可以简单地忽略临时文件名。

如果您使用自制脚本来传输文件,请使用rsync(1)等适当的转移工具替换它。

如果您使用的是商业产品,请提交错误消息。如果他们拒绝修理它,那么他们可能不知道他们在做什么 - 找到更好的产品。

答案 1 :(得分:0)

变化:

ls -la

为:

du -sk

似乎问题是ls -la只列出存在的目录而不是它们各自的大小(以字节为单位),因此cmp文件将始终相同。使用:

du -sk

你得到了目录的大小,而while循环将继续正常。