jde*_*een 5 linux ftp bash 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
Run Code Online (Sandbox Code Playgroud)
仅当出现错误时,返回值wget才不同于 0。如果-N正在使用并且远程文件比本地文件旧,则它的返回值仍然为 0,因此您无法使用它来检查文件是否已被修改。
您可以检查文件的运行时间以查看文件或内容是否已更改。例如,您可以使用以下内容:
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
Run Code Online (Sandbox Code Playgroud)
关于,不幸的是没有办法在or命令smbclient中保留时间戳。如果您需要它,您必须使用一些不同的工具(,...)getputscp -prsync -t
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |