我正在处理一个bash脚本,只有当远程时间戳与本地时间戳不同时才从FTP站点提取文件。放入文件后,它会通过samba(smbclient)将文件复制到其他3台计算机上。
一切正常,但即使wget -N ftp://insertsitehere.com返回遥控器上的文件不是更新的值,文件也会复制。检查脚本输出的最佳方法是什么,只有在从FTP中提取新版本时才会发生复制?
理想情况下,我希望复制到计算机以保存时间戳,就像wget -N命令一样。
以下是我的例子:
#!/bin/bash
OUTDIR=/cats/dogs
cd $OUTDIR
wget -N ftp://user:password@sitegoeshere.com/filename
if [ $? -eq 0 ]; then
HOSTS="server1 server2 server3"
for i in $HOSTS; do
echo "Uploading to $i..."
smbclient -A /root/.smbclient.authfile //$i/path -c "lcd /cats/dogs; put fiilename.txt"
if [ $? -eq 0 ]; then
echo "Upload to $i successful..."
else
echo "There was an issue uploading to host $i..."
fi
done
else
echo "There was an issue with the FTP Download...."
exit 1
fi
答案 0 :(得分:1)
仅当出现错误时,wget
的返回值才会不同于0。如果-N
正在使用且远程文件比本地文件旧,则它的返回值仍为0,因此您无法使用它来检查文件是否已被修改。
您可以检查文件的mtime以查看其是否更改,或内容。例如,您可以使用以下内容:
md5_old=$( md5sum filename.txt 2>/dev/null )
wget -N ftp://user:password@sitegoeshere.com/filename.txt
md5_new=$( md5sum filename.txt )
if [ "$md5_old" != "$md5_new" ]; then
# Copy filename.txt to SMB servers
fi
关于smbclient
,遗憾的是无法在get
或put
命令中保留时间戳。如果您需要,您必须使用其他工具(scp -p
,rsync -t
...)
答案 1 :(得分:0)
touch -r foo.txt foo.old
wget -N example.com/foo.txt
if [ foo.txt -nt foo.old ]
then
echo 'Uploading to server1...'
fi
wget --timestamping
仅下载较新的文件