在文件名带有“ SPACE”和特殊字符的卸妆服务器上存档文件

时间:2019-01-28 09:26:15

标签: shell unix ssh

我需要在远程服务器上使用sys time归档文件,但是文件名包含“ SPACE”和特殊字符。所以下面的命令不起作用。

datetime.datetime

但是上述命令失败,并出现以下错误。
bash:mv / upload / hotfolders / in / BBB ABC@textfile.xml / upload / hotfolders / Archive / BBB ABC@textfile.xml_01282019050200:否 这样的文件或目录

1 个答案:

答案 0 :(得分:1)

在原始提供的代码中:

ssh remoteid@remoteserver 'cd /upload/hotfolders/; mv "$FileName"
    /upload/hotfolders/Archive/"${FileName}_${ts}"'

最外面的'用于本地文件系统,以将所有命令作为ssh的单个参数保留。但是,这意味着$FileName等不在本地扩展!取而代之的是,将未扩展的字符串按原样传递给远程服务器,在远程服务器中启动外壳程序以运行命令。 $FileName等,然后在此处展开​​。由于未在此处定义它们,因此扩展无法产生任何有用的信息。

在修订版本中:

 ssh remoteid@remoteserver "'mv /upload/hotfolders/in/"$FileName" 
 /upload/hotfolders/Archive/${FileName}_${ts}'"

有一个不同的问题。这里,最外面的两套"允许本地系统扩展变量(尽管第一个$FileName实际上不在"内部可能并不明显)。但是,由于现在将传递的命令包装在'中,因此远程服务器会将整个字符串视为一个单词。

如果我们假设FileNamets将不包含shell特殊字符(例如'),则解决方法是将命令序列包装在"中(以便它在本地扩展),并且仅将变量包装在'中(以便远程服务器将现在扩展的字符串视为单个单词):

ssh remoteid@remoteserver "cd /upload/hotfolders/; mv '$FileName'
    /upload/hotfolders/Archive/'${Filename}_${ts}'"