Bash脚本只有在以前没有下载文件时才从FTP下载文件

时间:2017-04-18 13:34:51

标签: linux bash shell ftp sftp

我目前有一个从FTP站点下载文件的bash脚本。我想修改脚本以保留其下载的每个文件的清单,并且只下载不在清单中的任何新文件。有没有办法在bash中执行此操作,还是我在推动bash实际可以做的限制?

1 个答案:

答案 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.txtfilenames.txt以包含适当的路径。此外,更改echo命令可将文件名添加到您用于进行实际下载的其他文件或变量中。

以下是对正在发生的事情的解释:

前三行使用ftp来获取文件列表(您希望将*更改为指向正确的目录。)

cat行解析ftp ls命令的输出以获取文件名部分并将其放入另一个文件中。

然后while循环遍历文件列表并使用grep查看清单文件中是否存在文件名。如果没有,则可以下载并将其添加到清单中。

如果您有任何问题,请与我们联系。

希望这有帮助!