すべてのファイル+ディレクトリ構造をコピーするcpコマンドと、すでに存在するファイルのコピーをスキップするcpコマンドは何ですか

すべてのファイル+ディレクトリ構造をコピーするcpコマンドと、すでに存在するファイルのコピーをスキップするcpコマンドは何ですか

ディレクトリ構造を維持しながら、ディレクトリ内のすべてのファイルをバックアップハードドライブにコピーする必要があります。これは可能ですか?

find . -name '*.*' -exec cp --parents \{\} /target \;

その後、バックアップハードドライブを新しいコンピュータにコピーしたいのですが、ファイルが保存先にすでに存在する場合は、コピーしたくないのでスキップするだけです。

これを行う最良の方法は何ですか?

答え1

findaと組み合わせる必要はありませんcp。私はrsyncこの作業にそれを使用します。

「すべて」をコピーし、権限と所有権を維持したい場合(そしてコピーする必要のないコンテンツをスキップするには)「Try Run」などを使用してください。

sudo rsync -Havn sourcedir/ targetdir/

よかったら、削除して実際のnコピーを作成してください。

sudo rsync -Hav sourcedir/ targetdir/

末尾のスラッシュはsourcedir/重要で、で説明されていますman rsync

ハードリンクがない場合はスキップでき、H検索プロセスが速くなります。

rsync権限と所有権に問題がなければsudo

答え2

cpのマニュアルページを確認してください。ただし、-nフラグはトリックを実行する必要があります。

find . -name '.' -exec cp -n --parents {} /target ;

-n既存のファイルを上書きしません。

しかし、システムを確認してテストしてみてください。

cp では、変更時間とアクセス時間を保存するために -p フラグを追加することを検討できますが、権限、ACL、所有者など、保存したくない他の多くのファイルシステム情報も保存されます。

ただ {} の代わりに '{}' を書いて ; としてディレクティブを閉じます。

find . -name '*.*' -exec cp -n --parents '{}' /target \;

関連情報