機能テストは限られているため、このコマンドには注意してください(--dry-run):
rsync -avPr --ignore-existing --remove-source-files src/ dest
末尾の/に注意してください。これはsrc自体をコピーする代わりにsrcに再帰するため、既存のパスを維持する必要があります。
--ignore-existingフラグを--remove-source-filesフラグと組み合わせて使用することにより、srcからdestに同期されたファイル、つまりdestにのみ存在していなかったファイルのみをsrcから削除します。
同期されていないファイル、つまりsrc /のようにdest /にすでに存在するファイルを削除するには、次を使用できます。
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
または
find src -type f -exec bash -c 'cmp -s "$0" "${0/#src/dest}" && rm "$0"' {} \;
ファイル名に空白/新しい行/が含まれる可能性がある場合...特殊文字に関するGillesのコメントに関して、それは確かに注意すべきことであり、多くの解決策がありますが、最も簡単なのは-iをrmに渡し、すべての削除の前にプロンプトを表示することです。ただし、src /またはその親パスを検索するために提供されている場合、完全修飾パスを使用すると、すべてのファイル名が引用符なしでdiffコマンドとrmコマンドの両方によって適切に処理されます。