Rsync

rsync 僅從缺少某些文件的源中複製新文件

  • October 25, 2022

最近,我曾經rsync將一個包含大量文件和子目錄的大目錄複製到外部硬碟上。有些文件的文件名太長,rsync無法複製。截斷有問題的文件名後,現在我想複製生成的新文件。

如果我刪除了源目錄中的一些文件,但我不希望目標目錄中的任何內容被rsync. 我希望它們保持完整而不被鏡像到源,同時複製源中的新文件,最後,從源中刪除源和目標之間共有的所有文件(--remove-from-source)。

rsync -nrhtPsv --stats --ignore-existing --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

據我所知,--ignore-existing彼此--remove-source-files不兼容。

--ignore-existing並且--update在試執行中不顯示有關刪除/刪除任何內容的任何資訊,但兩者都列出了缺少文件的目錄的路徑。

什麼命令會做我想做的事?

一些標準:

  • 我不希望目標目錄中的任何內容被刪除rsync- 不要指定--delete
  • 我想$$ … $$複製源中的新文件- 像往常一樣
  • 從源中刪除源和目標之間共有的所有文件- 使用--remove-source-files

您沒有提到的是目標中的現有文件是否應該更新,所以我假設它們應該更新。

結果命令應如下所示,

rsync --dry-run -rt -Phv --stats --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

(刪除--dry-run以執行更改,而不僅僅是查看它們。)

您遇到的問題--ignore-existing --remove-source-files--ignore-existing作為排除規則實施的。這意味著存在於目標上的文件將被忽略,但由於它們被忽略,它們不能成為--remove-source-files. 根據您的情況,您可以使用--backup --remove-source-files然後在目的地恢復備份:

find /run/media/username/external_hdd -type f -name '*~' -exec sh 'for f in "$@"; do echo mv -f "${f} "${f%~}"; done' _ {} +

(刪除echo以執行重命名,而不僅僅是查看它們。)

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