copy_only_missing? - /B と /C に存在しないパスのみを /A から /C にコピーする - 簡潔な方法

copy_only_missing? - /B と /C に存在しないパスのみを /A から /C にコピーする - 簡潔な方法

コピーしたい/あ/Cパスが見つからない/Bそして/C(これらはパスであり、たとえば 経由でマウントされたリモートの場所も表すことができると想定してくださいsshfs

私は疑問に思う...ループを記述し、ファイルシステムを反復処理してファイルごとにチェックするよりも簡潔な方法はありますか?

ツリーディレクトリの内容の例/あ/B/C:

/あ:

/A/1abc/qwe
/A/2abc/asd
/A/3abc/zxc
/A/4abc/rty

/B:

/A/2abc/asd
/A/3abc/zxc

/C:

/C/1abc/qwe

予想: コピー元/あ/Cパスのみ4abc/rty:

/A/4abc/rty -> /C/4abc/rty

実例を挙げて説明すると/あ/B/C次のようなシナリオが考えられます。

  • バックアップを取って、コピーして/ソース/あ)一部に/行き先/B)そして、いくつかのパスはコピーできませんでした。だから、とにかく不足しているものをコピーしたいのです。/別の目的地/C)がそれらを受け入れることができ、不足しているものだけをコピーしたいとします。以下は、コピー元からコピーする理由の制限の例です。/あ/B失敗する可能性があります: ディスクがいっぱいです。ファイルシステムの制限/B(ファイル名の長さなど)は存在しないが、/Cファイルシステムなど

答え1

一つの解決策は、ユニオンマウントBとCの書き込みブランチをCとします。すると問題は、B+Cに存在しないファイルのみをAからB+Cにコピーすることになります。これは次のように実行できます。

rsync -a --ignore-existing /A /B+C

ユニオンマウントの場合、1つの可能性はユニオンFSヒューズ

unionfs-fuse -o cow /C=RW:/B=RO /B+C

または unionfs:

mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C 

関連情報