Find
將 rsync 源文件定義為最後一個參數
假設我正在使用我僅從以下兩個命令中知道的特殊功能
find
來定義- 操作的源文件:rsync
find /path/to/data -mtime -7 -mtime +5 -exec rsync -aAXu {} /path/to/dest \;
但是,在這種情況下,我不能使用
+
with-exec
asrsync
將目的地作為最後一個參數。這意味著
rsync
每個匹配文件都會呼叫一次,而不是創建參數列表並rsync
僅呼叫最少次。出現同樣的問題,
xargs
因為我需要-I
標誌,這意味著-L 1
.該手冊似乎沒有顯示
--destination-dir=dest
選項。有沒有什麼簡單的方法可以
rsync
從源文件列表中創建一個 -built-up 命令?也許這是一個 XY 問題,而其他命令更適合?
不要打電話
rsync
,而是-exec
打電話sh -c
:find ... -exec sh -c 'rsync ... "$@" /path/to/dest' sh {} +
這
sh -c
使用一個內聯腳本呼叫,該腳本只是rsync
以您想要的方式呼叫,並且"$@"
是從find
.尾隨
sh
是一個任意字元串,將放置$0
在內聯腳本中。這是必要的,因為第一個找到的路徑名將被放入$0
,因此不是擴展的一部分"$@"
。in 的值$0
應該是目前 shell 的名稱,並將在 shell 生成的任何診斷消息中使用。