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
、練習実行では削除/削除に関する情報は表示されませんが、すべてファイルが見つからないディレクトリへのパスが一覧表示されます。
私がしたいことをどのようなコマンドで実行できますか?
答え1
さまざまな規格:
- ターゲットディレクトリの何も削除したくない
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
表示のみではなく名前の変更を行う場合は削除してください。)