使用 find 與 scp 或 rsync 發送找到的文件

使用 find 與 scp 或 rsync 發送找到的文件

我正在嘗試運行一個簡單的命令來搜尋專用檔案類型,一旦找到,就將該檔案和目錄結構複製到遠端伺服器。

例如:

find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/ 

在這種情況下,它會將​​找到的檔案複製到具有父資料夾結構的單獨目錄中。我想用 rsync 或 scp 做同樣的事情。

我嘗試過對下面的程式碼進行一些爭論,但沒有成功。

find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/

任何援助將不勝感激。

我正在對多年的家庭照片進行排序,而不是在我的zfs 陣列上的一個目錄中找到它們並將它們重寫到同一陣列上的另一個位置(這會佔用時間),而是想找到它們並將它們發送到單獨的機器將按類型對它們進行排序,遍歷fdupes,然後遍歷phockup以按日期對它們進行排序。我這樣做是為了萬一我搞砸了,我會讓原始文件安全無虞。

編輯:我要感謝回答我問題的人。幸運的是我在你回覆之前找到了解決方案,不幸的是我沒有想到解決方案會有多慢。所以我選擇用以前的方式去做。

這是對我有用的程式碼。雖然它需要一些 ssh 金鑰交接才能正常工作,所以我不需要為每個文件輸入密碼。

find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'

我將嘗試提到的一些其他建議,看看它們是否更快,但就目前情況而言,我最終只是製作了一個在後台運行的 shell 腳本。

再次感謝!

答案1

find Source/ -type f -name '*.CR2' -print0 |
    rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/

--dry-run當您對計劃要做的事情感到滿意時,即可刪除。

答案2

我們可以使用下面的命令

 find  path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;

相關內容