ローカルファイルシステムでrsyncを移動する(コピーの代わりに)ファイルを作成する

ローカルファイルシステムでrsyncを移動する(コピーの代わりに)ファイルを作成する

rsyncローカルファイルシステムから大量のファイルをコピーする代わりに移動できますか?拡張コマンドのように機能したいですmv--remove-source-filesオプションについて知っていますが、実際にファイルを移動するか(必須)か、コピーしてから削除(必須)するかどうかはマニュアルに記載されていません。

編集する 私が達成したいのはrsync -rと同じですが、既存のディレクトリをマージするディレクトリにファイルを移動するrsync(改善されたmv)です。移動するたとえば、コピーしないでください。

$ tree d1 d2
d1
├── b
├── c
├── d
├── deep_house
│   └── dh1
└── sound
    └── sss
d2
├── a
└── deep_house
    └── dddx

3 directories, 7 files
$ rsync -r d1/ d2
$ tree d2
d2
├── a
├── b
├── c
├── d
├── deep_house
│   ├── dddx
│   └── dh1
└── sound
    └── sss

ベストアンサー1

Rsync はファイルをコピーします。それがまさにそのことです。ソースファイルを削除するように指示しても、ターゲットが同じファイルシステムにある場合でも、移動せずに最初にコピーします。

これmvGNU coreutilsのユーティリティ-uターゲットの場所が元の場所より古いかまだ存在しない場合にのみファイルを移動することを選択できます。これはrsyncに似ています-u

ディレクトリツリーを既存のディレクトリツリーに移動したい場合は、mv各ファイルを呼び出す再帰パトロールを使用できます。既存のファイルを上書きしないようにするには、次の手順を実行します。

cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;

既存のファイルを上書きするには、既存のディレクトリと他のファイルを区別し、ソースに通常のファイルがあり、ターゲットにディレクトリがある場合にどうするかを決定する必要があります。

おすすめ記事