我想在一個bash腳本里面的單個調用中rsync多個目錄,並且遇到引用路徑的語法問題。rsync帶引號的路徑的多個目錄
這裏就是我想:
backuppath='/path/to/backup/folders/'
declare -a backupitems=('folder1' 'folder2')
backupitems=(${backupitems[@]/#/\"$backuppath})
backupitems=(${backupitems[@]/%/\"})
backup=${backupitems[@]}
rsync ${backup} /path/to/destination
我得到一個link_stat錯誤說了"/path/to/current/directory"/path/to/backup/folders/folder1""
沒有這樣的文件或目錄,然後同樣的錯誤的文件夾2。所以它看起來就像我想要的那樣生成引用的路徑,但rsync會將路徑解釋爲相對路徑,並將路徑添加到前面當前目錄的路徑中。 rsync的正常工作,如果我做
backuppath='path/to/backup/folders/folder1'
rsync "${backuppath}" /path/to/destination
把報價爲rsync命令,但我不能夠與多個文件夾的一個變量中,因爲它把多個目錄,長單路做到這一點。我讓腳本使用第二種方法工作,方法是遍歷文件夾並在每個文件夾上調用rsync,但由於腳本的其他部分處理文件夾的方式,此方法稍微笨拙一些,所以我想要獲得第一種方法如果有一個快速解決方案,工作。
編輯:
對於上面的頂配版本,不帶空格的任何目錄名的,我看到使用下面的命令set -vx
: 的rsync「「/路徑/到/ backup /文件夾/文件夾1 「」 ' 「/路徑/到/ backup /文件夾/文件夾2」'/路徑/目的地
,我得到了以下錯誤消息/:由@kdubs
rsync: link_stat "/path/to/current/directory/"/path/to/backup/folders/folder1"" failed: No such file or directory (2)
如果我使用的版本建議,那麼當路徑中沒有空格時,所有東西都可以工作。
當有路徑空間,kdubs在命令版本的結果:
的rsync /路徑/到/備份/文件夾/文件夾1 /路徑/到/備份/文件夾/文件夾2 /路徑/到/目的地
和錯誤:
rsync: link_stat "/path/to/back" failed: No such file or directory (2)
rsync: link_stat "/path/to/back up/up/folder1" failed: No such file or directory (2)
我的第一個版本需要額外的調整用的空間工作,因爲擴大與[@]的陣列並創建由封閉與(擴展一個新的數組)導致將路徑中的空間分解爲多個數組元素(見Tonin的答案在下面)。
很好的問題,升值的示例代碼。但是..將更容易診斷您的問題,插入實際的錯誤消息並將其格式化爲代碼。也可以嘗試用'set -vx; rsync ...;設置+ vx'。祝你好運。 – shellter