我正在尝试使用以下 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