我目前有一个从FTP站点下载文件的bash脚本。我想修改脚本以保留其下载的每个文件的清单,并且只下载不在清单中的任何新文件。有没有办法在bash中执行此操作,还是我在推动bash实际可以做的限制?
答案 0 :(得分:0)
我的建议是获取您可能要下载的文件列表,将其与清单进行比较,然后下载不在清单中的文件。这样的事情应该有效:
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
来获取文件列表(您希望将*
更改为指向正确的目录。)
cat
行解析ftp ls
命令的输出以获取文件名部分并将其放入另一个文件中。
然后while循环遍历文件列表并使用grep查看清单文件中是否存在文件名。如果没有,则可以下载并将其添加到清单中。
如果您有任何问题,请与我们联系。
希望这有帮助!