Rsync
rsync 僅從缺少某些文件的源中複製新文件
最近,我曾經
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
以執行重命名,而不僅僅是查看它們。)