Shell 从sftp获取最新文件到本地计算机
我需要从sftp获取最新的文件到我的本地机器,我有一个概念,就是在获取列出的最新文件之前,先在sftp中列出目标目录的最新文件 是否有任何命令可以使用linux shell脚本完成此操作Shell 从sftp获取最新文件到本地计算机,shell,Shell,我需要从sftp获取最新的文件到我的本地机器,我有一个概念,就是在获取列出的最新文件之前,先在sftp中列出目标目录的最新文件 是否有任何命令可以使用linux shell脚本完成此操作 file=$(sftp username@servername 'ls -ltr /server/path | tail -n 1') 我使用此命令列出了最新的文件,但它不起作用。我也不知道获取所列文件的命令,知道吗?您的ls选项有误,请尝试: file=$(ssh username@servername '
file=$(sftp username@servername 'ls -ltr /server/path | tail -n 1')
我使用此命令列出了最新的文件,但它不起作用。我也不知道获取所列文件的命令,知道吗?您的
ls选项有误,请尝试:
file=$(ssh username@servername 'ls -1tr /server/path' | tail -n 1)
您正在使用-l
(小写l
用于long
列表)选项,而不是使用-1
(第一)选项(每行列出一个文件
),这会导致ls
命令包含文件权限、文件所有权等。。。当用作scp的输入时,会导致命令失败
此外,如果要向scp
提供文件名,则不需要-r
(递归)选项。以下是scp
命令所需的全部内容。(如果文件名中有空格,请不要忘记双引号“$file”
,以防止分词)
您的ls选项不正确,请尝试:
file=$(ssh username@servername 'ls -1tr /server/path' | tail -n 1)
您正在使用-l
(小写l
用于long
列表)选项,而不是使用-1
(第一)选项(每行列出一个文件
),这会导致ls
命令包含文件权限、文件所有权等。。。当用作scp的输入时,会导致命令失败
此外,如果要向scp
提供文件名,则不需要-r
(递归)选项。以下是scp
命令所需的全部内容。(如果文件名中有空格,请不要忘记双引号“$file”
,以防止分词)
要做到这一点,我确实面临着艰难的时刻。显然,在sftp控制台上运行时,tail不是有效的命令。
在我的例子中,我们只有通过SFTP而不是通过SSH访问服务器。因此,通过ssh执行命令时,解决方案对我不起作用
//this gives me name of the latest file on SFTP server
fileName=$(echo "ls -1rt" | sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir | tail -1)
//this fetches the latest file from sftp server
echo "get $fileName" |sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir
//这提供了SFTP服务器上最新文件的名称
文件名=$(echo“ls-1rt”| sftp-oIdentityFile=username@sftpServer:/remoteDir | tail-1)
//这将从sftp服务器获取最新的文件
echo“get$fileName”| sftp-oIdentityFile=username@sftpServer:/remoteDir
将上述命令集包装到shell文件中,它将为您顺利工作
希望这能节省一些时间和精力,帮助别人我确实面临着实现这一目标的艰难时刻。显然,在sftp控制台上运行时,tail不是有效的命令。
在我的例子中,我们只有通过SFTP而不是通过SSH访问服务器。因此,通过ssh执行命令时,解决方案对我不起作用
//this gives me name of the latest file on SFTP server
fileName=$(echo "ls -1rt" | sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir | tail -1)
//this fetches the latest file from sftp server
echo "get $fileName" |sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir
//这提供了SFTP服务器上最新文件的名称
文件名=$(echo“ls-1rt”| sftp-oIdentityFile=username@sftpServer:/remoteDir | tail-1)
//这将从sftp服务器获取最新的文件
echo“get$fileName”| sftp-oIdentityFile=username@sftpServer:/remoteDir
将上述命令集包装到shell文件中,它将为您顺利工作
希望这将节省一些时间和精力,并帮助某人获得多个文件名,请使用好的旧回溯:
file=`ssh username@servername 'ls -ltr /server/path' | grep "Mar 16"|awk '{print $9'}`
这是假设您可以自动登录到远程。
使用这些文件名发布此文件,您可以再次执行sftp来获取多个文件名,请使用正确的旧反引号:
file=`ssh username@servername 'ls -ltr /server/path' | grep "Mar 16"|awk '{print $9'}`
这是假设您可以自动登录到远程。
使用这些文件名发布后,您可以再次执行sftp您可以使用sftp
(或scp
,这对于这样的命令行/shell情况更为友好)来下载文件,但不能像您这样运行ls
命令。相反,您可以尝试“file=$(sshusername@servername“ls-ltr/server/path”| tail-n1)或类似的东西,即使用ssh
而不是sftp
。我尝试了file=$(sshusername@servername“ls-ltr/server/path”| tail-n 1)scp-rusername@servername:/path/path/$file/my/home/directory,但这似乎适用于列出文件,但无法获取最新文件。这个命令有错误吗?无论如何,谢谢你的回答!请使用上述尝试/更改更新您的帖子,并添加您遇到的错误。这些更新最好在文章中完成,而不是在评论中完成,以供将来的网站读者使用。请注意,当您在sftp
上运行ls
时,它会给您。。。sftp命令版本的ls
,而不是远程系统版本的ls
。它决不能保证支持相同的选项。您可以使用sftp
(或scp
,这对于这样的命令行/shell情况更为友好)来下载文件,但不能像您这样运行ls
命令。相反,您可以尝试“file=$(sshusername@servername“ls-ltr/server/path”| tail-n1)或类似的东西,即使用ssh
而不是sftp
。我尝试了file=$(sshusername@servername“ls-ltr/server/path”| tail-n 1)scp-rusername@servername:/path/path/$file/my/home/directory,但这似乎适用于列出文件,但无法获取最新文件。这个命令有错误吗?无论如何,谢谢你的回答!请使用上述尝试/更改更新您的帖子,并添加您遇到的错误。这些更新最好在文章中完成,而不是在评论中完成,以供将来的网站读者使用。请注意,当您在sftp
上运行ls
时,它会给您。。。sftp命令版本的ls
,而不是远程系统版本的ls
。它决不能保证支持相同的选项。谢谢。我也有同样的问题。我不能使用ssh,必须使用sftp。T