Linuxのシェルスクリプトのbashでコピーをする際に、既に同名のファイル名があったらコピーしないというようなことを簡単に実現できる

cpコマンドのオプションや方法などはありますでしょうか。

バックアップ作業をさせているのですが、前はPHPで配列を作って差分を見てとかいうめんどくさいことをしていたのですが・・、フォルダごとコピーするスクリプトを書くのに、もっとシンプルな方法があるはずだという思いで質問をしています。

cpコマンドのオプション?の読み方を間違っているだけかもしれませんが。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/11/23 15:00:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:online_p No.2

回答回数1153ベストアンサー獲得回数59

ポイント35pt

ふつうのcpにはそういうオプションはないのですが、gnu cpにはあります。rsyncなどと同じように、同名ファイルがある場合、作成時期がより新しくないとコピー上書きしません。

cp -u

ですね。

id:nakamura12go

ありがとうござます。書いてある頁によって、-uオプションのあるページとないページがあったのはそういうことだったのですね。

ようやく理解できました。

2010/11/17 05:43:31

その他の回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント35pt

cp単体ではたしか無理ですよ

rsyncで対応するのがシンプルだと思います

http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.htm...

id:nakamura12go

すばらしい!!

的確な答えをありがとうございます。

2010/11/16 15:22:01
id:online_p No.2

回答回数1153ベストアンサー獲得回数59ここでベストアンサー

ポイント35pt

ふつうのcpにはそういうオプションはないのですが、gnu cpにはあります。rsyncなどと同じように、同名ファイルがある場合、作成時期がより新しくないとコピー上書きしません。

cp -u

ですね。

id:nakamura12go

ありがとうござます。書いてある頁によって、-uオプションのあるページとないページがあったのはそういうことだったのですね。

ようやく理解できました。

2010/11/17 05:43:31
  • id:windofjuly
    うぃんど 2010/11/16 15:31:08
    訂正:
    >cp単体ではたしか無理ですよ
    単純に「同名はコピーしない」ということと「バックアップが目的」ということに反応してrsyncを回答しましたが、
    「同名は日付を比較して、コピー先のほうが古ければ上書き」の場合は cpコマンドの -u オプションを使ってもよかったですね
  • id:JULY
    > 同名は日付を比較して、コピー先のほうが古ければ上書き」の場合は cpコマンドの -u オプション

    もし、「とにかく同名のファイルがあったらファイルが新しくなっても上書きしない」なら、yes コマンドを使って、

    $ yes no | cp -ri srcdir/* dst/ >/dev/null 2>&1

    とすれば出来るけど、実用性は無さそう(^^;。

    # yes コマンドに「no」という文字列を引数を渡すのは、なんかシュール...。
  • id:nakamura12go
    yes コマンドというもの自体を初めて知りました。
    コマンド例をありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません