Linuxでファイルをコピーし、宛先にファイルが存在する場合はコピーを避けます


32

/ home / userフォルダーをあるハードディスクから別のハードディスクにコピーする必要があります。100,000個のファイルと約10Gのサイズがあります。

私が使う

cp -r /origin /destination

リンクの破損や権限などが原因でエラーが発生することがあります。そのため、エラーを修正し、再度コピーを開始する必要があります。

コピー先のフォルダーにファイルが存在する場合、ファイルを再度コピーするのではなく、もう一度コピーしようとすると、コマンド "cp"にどのように伝えることができるのでしょうか。


2
cpしないでください。代わりにrsyncを使用してください。
ウィリアムパーセル

回答:


22

cp -R -u -p /source /destination

-uまたは--update)フラグだけでこの処理を行います。

cpのmanページから:

-u、-update

SOURCEファイルが宛先ファイルよりも新しい場合、または宛先ファイルが欠落している場合にのみコピーします


6
文字通り存在しないファイルのみをコピーし、既存のファイルを更新しないために、 yes n | cp -i /source/* /destination 2>/dev/null
-sventechie

4
-u、--sourceファイルが宛先ファイルよりも新しい場合、または宛先ファイルが欠落している場合のみコピーを更新します。-u、--update SOURCEファイルが宛先ファイルよりも新しい場合、または宛先ファイルが欠落している場合のみコピーを更新します。 -p --preserve = mode、ownership、timestampsと同じ--preserve [= ATTR_LIST]指定された属性(デフォルト:モード、所有権、タイムスタンプ)を保持し、可能であれば追加の属性:コンテキスト、リンク、xattr、すべて
Covich

51

使用するだけcp -n <source> <dest>です。

manページから:

-n、-no-clobber

既存のファイルを上書きしない(以前の-iオプションを上書きする)


7
これが質問に対する唯一の真の答えです。
sebix

20

rsync -aq /src /dest

新しいファイルをコピーするだけでなく、ファイルが変更された場合、ファイルの新しい部分のみをコピーします。データの量を最小限に抑えたいネットワークリンクを介してコピーすることを目的としていますが、ローカルでも問題なく機能します。


投稿に ``書式を追加することはできません。これは2文字しかないためです。これを編集して、コマンドの周りに ``文字を追加することについてどう思いますか?
-culix

4

cpコマンドの「-u」オプションを検索します。


2
-uを使用するのは良い考えであることに同意しません。-uは、ソースがより新しいか、宛先が欠落している場合にのみコピーします。元のポスターの問題は、何らかの理由でファイルのコピーが壊れていることが原因でした。そのため、OPには、コピーの再実行時に更新されなかった半書き込みファイルがあります。そのファイルは誰かにとって重要かもしれません!rsyncはこの問題を解決します。
hazymat

2

上記の答えはすべて正しいですが、これを再帰的に行う場合は

やったほうがいい:

 cp -rn SOURCE_PATH DESTINATION_PATH

1

ルートとしてコピーして、権限/所有権を維持する必要があります

# cp -au

rsyncもご覧ください


1

POSIXソリューション

のその他の回答の使用-u または-nオプションcp。これらのいずれもPOSIXでは必要ありません。またrsync別の答えからでもありません。またyes、コメントの1つでも使用されていません。

それでも私たちは再現できyes nwhileループ。これにより、次のPOSIXソリューションが実現します。

while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null

0

つかいます cp -rn <sourcedirname>/. <destdirname>

rスイッチは、ディレクトリ上でコピーを再帰的にします。

nスイッチ(ロングバージョンのノークローバー)は、既存のファイルが上書きされないようにします。

/.sourcedirnameの後の ' 'は、前者のすべての内容が後者にコピーされる代わりに、destdirnameの下のサブディレクトリにならないようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.