2017-02-06 51 views
0

在下面bash備份腳本:寫入文件在錯誤的道路使用bash

PROJECT="testPrj" 
BACKUP_DIR="~/Documents/backups/" 
BACKUP_FILES="./*.sh ./*.h ./*.hpp ./*.c ./*.cc ./*.cpp ./*.md ./*.txt ./BUILD" 
BACKUP_TIME=_`date +%Y%m%d_%H%M` 
BACKUP_FILENAME=$BACKUP_DIR$PROJECT$BACKUP_TIME.tar.bz2 

mkdir -p $BACKUP_DIR 
echo "Created backup directory:" $BACKUP_DIR 

echo $BACKUP_FILENAME 

tar -cpjf $BACKUP_FILENAME $BACKUP_FILES 

這是輸出:

創建的備份目錄:〜/文檔/備份/ 〜/文檔/backups/testPrj_20170206_1609.tar.bz2

我得到了錯誤路徑中的壓縮文件。而不是被: ~/Documents/backups/

不言而喻的:\~/Documents/backups/

此目標目錄有效存在的,它是在本地路徑。

從命令行自行運行mkdir會在正確的位置創建目錄。

+2

''在引號中不會展開到您的主目錄。使用'BACKUP_DIR =〜/「文件/備份/」'。另外,爲變量名使用小寫是最安全的,因此您不會意外地使用對shell或其他程序有特殊含義的變量名(使用'$ PATH'就是一個典型示例)。 –

+0

你是對的。如果您將此評論移至答案,我會接受它。 – Pietro

+0

你可能更喜歡'BACKUP_DIR =「$ HOME/Documents/backups /」,它可以工作。 –

回答

1

~在引號內時不會展開到您的主目錄。給它(及以下/)未加引號,像這樣:

BACKUP_DIR=~/"Documents/backups/" 

此外,這是最安全的使用小寫或大小寫混合的變量名,所以你不小心使用具有特殊意義的外殼變量名或其他程序(使用$PATH就是一個典型例子)。