2013-12-21 38 views
1

我想寫一個備份腳本,需要一個目錄和目錄/文件名作爲腳本的參數。問題在於策劃備份的目標目錄。爲了安全起見,我正在將文件移動到MacOS ~/.Trash/。問題是我想支持在目標目錄的文件名中有空格,但在mv中轉義路徑可以防止shell的擴展爲*Bash:移動文件與正則表達式,匹配腳本的麻煩和固定文本的模式

有問題的腳本:

# Usage: backup-to-dropbox.sh "path/containing/target" "target dir" 
cd "$1" 
DATE=`date "+%Y%m%dT%H%M%S"` 
SOURCE="$2" 
mv "~/Dropbox/Backups/$SOURCE*.tgz" ~/.Trash/ ## Problem line here 
tar -czf "$SOURCE $DATE.tgz" "$SOURCE/" 
mv "$SOURCE $DATE.tgz" ~/Dropbox/Backups/ 

我如何能匹配所有與此知道,任意前綴和固定的擴展名的文件?

+0

我試過了,沒有問題。你能用'set -x'運行腳本來查看該行發生了什麼。我會懷疑你有太多的文件,可能會超過1024個字符的命令行緩衝區。 – unxnut

回答

1

單詞可以部分引用。請務必不要引用shell擴展的任何內容。

mv ~/"Dropbox/Backups/$SOURCE"*.tgz ~/.Trash/ 
+0

嘗試使用此線。錯誤:'mv:rename〜/ Dropbox/Backups/Test Dir * .tgz到/Users/user-redacted/.Trash/Test Dir * .tgz:沒有這樣的文件或目錄。對於名稱中沒有空格的目錄也是如此。 – user2943160

+0

啊哈!使用'mv〜/「Dropbox/Backups/$ SOURCE」*。tgz〜/ .Trash /' – user2943160

+1

好的。這就是我從iPad上回答的問題。 ; ^) –