我目前有一个从FTP站点下载文件的bash脚本。我想修改脚本,以保留它下载的每个文件的清单,并且只下载清单中不存在的任何新文件。有没有办法在bash中做到这一点,或者我是否突破了bash实际所能做的限制?
发布于 2017-04-18 17:12:20
我的建议是去获取您可能想要下载的文件列表,将其与您的清单进行比较,然后下载清单中未包含的文件。像这样的东西应该是有效的:
ftp username@hostname <<EOF
ls * filelist.txt
EOF
cat filelist.txt | awk '{print $9}' | tail -n +3 > filenames.txt
while IFS= read -r file
do
if [[ ! $(grep "$file" manifest.txt) ]]; then
echo "$file is not in manifest"
fi
done < "filenames.txt"
当然,您需要更改filelist.txt
和filenames.txt
以包含适当的路径。另外,更改echo
命令,将文件名添加到另一个文件或变量中,您将使用该文件或变量进行实际下载。
以下是对所发生的事情的解释:
前三行使用ftp
获取文件列表(您需要更改*
以指向正确的目录)。
ftp行解析ls
命令的输出,仅获取文件名部分并将其放入另一个文件中。
然后,while循环遍历文件列表,并使用grep查看文件名是否存在于清单文件中。如果没有,您可以下载它并将其添加到清单中。
如果你有任何问题,请告诉我。
希望这能有所帮助!
https://stackoverflow.com/questions/43473762
复制