Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 从sftp获取最新文件到本地计算机_Shell - Fatal编程技术网

Shell 从sftp获取最新文件到本地计算机

Shell 从sftp获取最新文件到本地计算机,shell,Shell,我需要从sftp获取最新的文件到我的本地机器,我有一个概念,就是在获取列出的最新文件之前,先在sftp中列出目标目录的最新文件 是否有任何命令可以使用linux shell脚本完成此操作 file=$(sftp username@servername 'ls -ltr /server/path | tail -n 1') 我使用此命令列出了最新的文件,但它不起作用。我也不知道获取所列文件的命令,知道吗?您的ls选项有误,请尝试: file=$(ssh username@servername '

我需要从sftp获取最新的文件到我的本地机器,我有一个概念,就是在获取列出的最新文件之前,先在sftp中列出目标目录的最新文件

是否有任何命令可以使用linux shell脚本完成此操作

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