Centos
rsync 不同名稱的文件目錄
我正在嘗試將
rsync
文件從一個目錄incoming
到一個名為的目錄outgoing
,即/testcopy/folder1/incoming/test1.txt
到
/testdest/folder1/outgoing/
目錄來源:
/testcopy/folder1/incoming/test1.txt /testcopy/folder1/incoming/test2.txt /testcopy/folder2/incoming/test1.txt /testcopy/folder2/incoming/test2.txt /testcopy/folder3/incoming/test1.txt /testcopy/folder3/incoming/test2.txt
目錄目的地:
/testdest/folder1/outgoing/ /testdest/folder2/outgoing/ /testdest/folder3/outgoing/
我希望目的地看起來像什麼:
/testdest/folder1/outgoing/test1.txt /testdest/folder1/outgoing/test2.txt /testdest/folder2/outgoing/test1.txt /testdest/folder2/outgoing/test2.txt /testdest/folder3/outgoing/test1.txt /testdest/folder3/outgoing/test2.txt
rsync
我試過的腳本:touch /testcopy/folder3/incoming/test4.txt
我希望看到的是
test4.txt
文件下/testdest/folder3/outgoing/
# rsync -av /testcopy/*/incoming/* /testdest/*/outgoing/ sending incremental file list sent 520 bytes received 12 bytes 1,064.00 bytes/sec total size is 0 speedup is 0.00
我已經嘗試了上述腳本的幾個不同的迭代,但似乎無法做到正確。
rsync
不允許重寫源和目標之間的路徑。你可以做的是
rsync
為每個/testcopy/*/incoming
目錄呼叫一次:for srcdir in /testcopy/*/incoming/; do [ ! -d "$srcdir" ] && break destdir=/testdest/${srcdir#/testcopy/} # replace /testcopy/ with /testdest/ destdir=${destdir%/incoming/}/outgoing/ # replace /incoming/ with /outgoing/ mkdir -p "$destdir" && rsync -av "$srcdir" "$destdir" done
對於每個目錄,通過將路徑前綴替換為並將路徑後綴
incoming
替換為來構造目標路徑。這是使用兩個標準參數替換來完成的。/testcopy/``/testdest/``/incoming/``/outgoing/
循環還會創建目標目錄,以防萬一它不存在。
[ ! -d "$srcdir" ] && break
循環開頭的 確保如果模式與任何內容都不匹配mkdir
,則不會執行 andrsync
(shell 預設情況下會保持模式未擴展,除非您在 中zsh
)。在bash
中,您可能希望shopt -s nullglob
在循環之前使用。