2016-03-06 78 views
1

我試圖從一個bash腳本中移動文件,Linux的MV命令從腳本失敗 - 使用變量

我源和目的地保存到變量:

source='/Users/usr/Downloads/Drop/test\ movie.m4v' 
dest='/Users/usr/Downloads/Movies/test\ movie.m4v' 

而且我運行:

mv $source $dest 

我得到的輸出:

usage: mv [-f | -i | -n] [-v] source target 
    mv [-f | -i | -n] [-v] source ... directory 

我在做什麼錯了!?

我正在移動的文件可能包含或不包含其路徑中的空格。我使用sed在空格前添加了escape char。

感謝提前:)

回答

1

還有一堆的方法來處理包含空格的文件名,一個快速的解決方案可能是包裹在mv命令中的變量報價:

#!/bin/bash 

source=/path/to/file\ with\ space 
dest=/path/to/file\ with\ space2 

mv "$source" "$dest" 
+0

如果你這樣做,那麼去掉「\」逃脫字符 – stell1315

+0

或刪除單引號......無論如何,工作。逃避絕對是醜陋的,也許更多的是痛苦:) –

0

而不是使用轉義字符我只是在我的包裹中的變量引用,因此:

source='/Users/usr/Downloads/Drop/test movie.m4v' 
dest='/Users/usr/Downloads/Movies/test movie.m4v' 

mv "$source" "$dest"