我需要在远程服务器上使用sys time归档文件,但是文件名包含“ SPACE”和特殊字符。所以下面的命令不起作用。
datetime.datetime
但是上述命令失败,并出现以下错误。
bash:mv / upload / hotfolders / in / BBB ABC@textfile.xml / upload / hotfolders / Archive / BBB ABC@textfile.xml_01282019050200:否
这样的文件或目录
答案 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
实际上不在"
内部可能并不明显)。但是,由于现在将传递的命令包装在'
中,因此远程服务器会将整个字符串视为一个单词。
如果我们假设FileName
和ts
将不包含shell特殊字符(例如'
),则解决方法是将命令序列包装在"
中(以便它在本地扩展),并且仅将变量包装在'
中(以便远程服务器将现在扩展的字符串视为单个单词):
ssh remoteid@remoteserver "cd /upload/hotfolders/; mv '$FileName'
/upload/hotfolders/Archive/'${Filename}_${ts}'"