Find

將 rsync 源文件定義為最後一個參數

  • July 1, 2022

假設我正在使用我僅從以下兩個命令中知道的特殊功能find來定義- 操作的文件:rsync

find /path/to/data -mtime -7 -mtime +5 -exec rsync -aAXu {} /path/to/dest \; 

但是,在這種情況下,我不能使用+with -execasrsync目的地作為最後一個參數。

這意味著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 生成的任何診斷消息中使用。

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