bash:使用 scp 检查远程文件是否存在

问题描述 投票:0回答:3

我正在编写一个 bash 脚本来将文件从远程服务器复制到我的本地计算机。我需要检查该文件是否可用,因此如果不存在,我可以采取替代操作。

我知道如何测试本地文件是否存在,但是,使用 scp 会使事情变得有点复杂。常识告诉我,一种方法是无论如何尝试 scp 文件,并检查 scp 命令的返回代码。这是正确的做法吗?

如果是,如何测试 scp 调用的返回代码?

bash scp
3个回答
15
投票

使用 ssh + cmd 行中嵌入的一些 shell 代码;当您需要在文件传输失败之前做出决定时,请使用此方法;

ssh remote-host 'sh -c "if [ -f ~/myfile ] ; then gzip -c ~/myfile ; fi" ' | gzip -dc > /tmp/pkparse.py

如果您想传输目录,您可能需要先“tar”它

如果你想使用 scp,你可以检查返回码,如下所示:

if scp remote-host:~/myfile ./ >&/dev/null ; then echo "transfer OK" ; else echo "transfer failed" ; fi

这实际上取决于您何时需要了解该文件是否存在;在传输开始之前(使用 ssh+sh)或完成之后。


0
投票

好吧,既然您可以使用

scp
,您可以尝试使用
ssh
列出并查看该文件是否是他们的,然后再继续。


0
投票

在执行 scp 之前,您必须运行 ssh 命令并检查文件或目录。我正在使用 stat 命令来验证文件/目录是否存在。我编写的用于检查和传输文件的脚本是

if ssh write_remote_host_here "stat write_filename_here"; then
   echo "file already exist"
else
   scp write_filename_here write_remote_host_here:destination_directory_here

如果 SSH 不能以这种方式工作并要求输入密码,请考虑在任何 ssh 或 scp 命令之前使用 sshpass,你必须这样写

sshpass -p write_password_here ssh write_remote_[email protected] "stat write_filename_here"

不要忘记通过brew或apt在你的机器上安装sshpass

此外,如果您要检查的文件不存在于同一目录中,则像这样检查文件

if ssh write_remote_host_here "cd /destination_directory_path_here; stat write_filename_here"; then
© www.soinside.com 2019 - 2024. All rights reserved.