ディレクトリ構造を維持しながら、ディレクトリ内のすべてのファイルをバックアップハードドライブにコピーする必要があります。これは可能ですか?
find . -name '*.*' -exec cp --parents \{\} /target \;
その後、バックアップハードドライブを新しいコンピュータにコピーしたいのですが、ファイルが保存先にすでに存在する場合は、コピーしたくないのでスキップするだけです。
これを行う最良の方法は何ですか?
答え1
find
aと組み合わせる必要はありません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 \;