使用 sftp 移动文件

使用 sftp 移动文件

我正在尝试使用以下 sftp 将文件从远程服务器上的一个位置移动到另一个位置:

for i in a b c d
do
sftp $REMUSR <<EOM>>$OUT 2>&1
rename $SOURDIR/sample_${i}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz $REMDIR
quit
EOM
:
:
done

但我收到了消息

Couldn't rename file "/source/sample_a_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz" to       "/destin/": No such file or directory

尽管该文件存在于我已验证的 /source 目录下:

ls -l sample_a_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz
-rw-r--r--  1 prd admin 112 May 23 09:16 sample_a_20140330.gz

请帮忙

答案1

我认为你需要提供一个目标文件名

sftp> rename f destin/
Couldn't rename file "/home/iain/s" to "/home/iain/destin/": No such file or directory
sftp> rename f destin/s

我进行了快速搜索,但似乎没有一个干净的解决方案。

答案2

首先,你似乎缺少远程主机上的一个目标,其次,你似乎正在尝试将目录重命名为文件。如果你尝试重命名目录,尝试使用完整路径,而不是使用尾随的“/”(例如重命名 /home/mydir /home/otherdir )

此外,看起来命令将正则表达式视为实际的文件名(基于错误消息中的引号)尝试将脚本中的命令括在反引号“`”中。

请记住,仅仅因为您在远程服务器上执行,命令就会在本地进行解释。

另一种可能性是使用批处理模式来运行命令,而不是您正在使用的 <> 方法。

答案3

sftp 无法看到远程文件名来处理通配符,请改用带有 mv 的 ssh:

 ssh $REMUSR mv $SOURDIR/sample_${i}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz $REMDIR"

这里隐含的远程 shell 进程将执行全局操作并将结果传递给 mv

相关内容