bash - wget -N if else value check

时间:2014-06-26 03:13:53

标签: linux bash ftp wget timestamping

我正在处理一个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

2 个答案:

答案 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,遗憾的是无法在getput命令中保留时间戳。如果您需要,您必须使用其他工具(scp -prsync -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
  1. "保存"当前时间戳到新的空文件
  2. 使用wget --timestamping仅下载较新的文件
  3. 如果文件比" save"更新?文件,做东西