web-dev-qa-db-ja.com

ディレクトリのコピー+名前の変更

次の場所からディレクトリをコピーしたい:

path1/dir1

path2/dir2

初めて呼び出すとき

cp -r path1/dir1 path2/dir2

問題ありません、dir2はpath2の下に作成されます

ls path2/dir2

2回目は、dir1がpath2/dir2の下に作成されます。

ls path2/dir2/dir1

cpだけを使用して正しい動作を取得できますか? (= rm -f path2/dir2を呼び出さずに)

5
Pierre

-Tオプションを使用してcp(GNU cp):

cp -rT path2/dir2 path1/dir1

これにrsyncを使用する場合(変更されていないファイルのコピーを回避するため、おそらくこれが必要です)、ソースディレクトリに/を追加して、内容が具体的になるようにすることができます。ディレクトリ自体ではなくコピーされます。例えば:

rsync -r path1/dir1/ path2/dir2
6
Graeme

ディレクトリを既存の宛先に「コピー」するときの動作があいまいです。あなたは__したいですか

  • 新しいファイルのみを追加しますか?
  • 新しいファイルを追加し、内容が変更されたファイルを更新しますか?
  • ファイルを追加および更新し、ソースから削除された宛先のファイルを削除しますか?

基本的に、単純なコピー操作と考えるものは、実際にははるかに複雑であり、cpには複雑すぎます。いずれの場合も、代わりにrsyncコマンドを使用する必要があります。

2
200_success