Centos

rsync 不同名稱的文件目錄

  • January 19, 2020

我正在嘗試將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,則不會執行 and rsync(shell 預設情況下會保持模式未擴展,除非您在 中zsh)。在bash中,您可能希望shopt -s nullglob在循環之前使用。

引用自:https://unix.stackexchange.com/questions/562892