我有一組腳本用於通過FTP下載文件,然後將它們從服務器中刪除。Bash - 轉義SSH命令
其工作原理如下:
for dir in `ls /volume1/auto_downloads/sync-complete`
do
if [ "x$dir" != *"x"* ]
then
echo "DIR: $dir"
echo "Moving out of complete"
# Soft delete from server so they don't get downloaded again
ssh [email protected] mv -v "'/home/dan/Downloads/complete/$dir'" /home/dan/Downloads/downloaded
現在$ DIR可能是 「這是一個文件」,它工作正常。
我遇到的問題是有特殊字符,例如:
- 「這是(a)提交」
- 這是一個文件&東西」
往往錯誤:
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `mv -v '/home/dan/Downloads/complete/This is (a) file' /home/dan/Downloads/downloaded'
我不知道如何逃避它,所以變量得到評估和命令正確地轉義。我試過的轉義字符的各種組合,文字的報價,報價正常,等
怎麼樣'rsync的--remove-源files' http://serverfault.com/a/363925/69736 。更容易! –
目前還不清楚如何將'dir'設置爲單個字符串'This is(a)file'。它應該先後設置爲4個單獨的字符串'This','是','(a)'和'file'。不要分析'ls'的輸出;切換目錄並迭代glob(請參閱我的答案以獲取詳細信息)。 – chepner