
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 はファイルをコピーします。それがまさにそのことです。ソースファイルを削除するように指示しても、ターゲットが同じファイルシステムにある場合でも、移動せずに最初にコピーします。
これmv
GNU coreutilsのユーティリティ-u
ターゲットの場所が元の場所より古いかまだ存在しない場合にのみファイルを移動することを選択できます。これはrsyncに似ています-u
。
ディレクトリツリーを既存のディレクトリツリーに移動したい場合は、mv
各ファイルを呼び出す再帰パトロールを使用できます。既存のファイルを上書きしないようにするには、次の手順を実行します。
cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;
既存のファイルを上書きするには、既存のディレクトリと他のファイルを区別し、ソースに通常のファイルがあり、ターゲットにディレクトリがある場合にどうするかを決定する必要があります。
答え2
rsync
ファイルをコピーしますが移動しません。
find
とを組み合わせると、mv
希望の効果が得られます。