ファイルへのハードリンクを再帰的に保持するディレクトリツリーをコピーしようとしています。 gnu cpを使用すると、これは-lフラグで機能します。その後、cpはディレクトリ構造を再作成しますが、各ファイルの内容をコピーする必要はありません。
これはバックアップの準備段階です。最初に前のバックアップの安価な(ハードリンクされた)コピーを作成し、次にこのコピーを介してソースディレクトリをrsyncします。大まかに:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
残念ながら、OSXのcpは-lフラグをサポートしていません。私が知る限り、cpioは再帰コピーをサポートしていません。もう1つの方法はpaxですが、これにより、ディレクトリ構造全体がコピーされます。
pax -rw backups/yesterdays_backup backups/todays_backup
変換:
yesterdays_backup
|
\source_dir (...)
に:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
これを行う簡単で明白な方法があるはずですが、私は現在困惑しています... cpioとpaxに代わるものはありますか? gnucpをインストールする必要はありません。
私はTimemachineを知っていますが、暗号化されたディレクトリを段階的に適切にバックアップしません。
MacPortsからcpをインストールするのは簡単ですが、移植したくない場合、またはポータブルスクリプトを作成したい場合は、次の3つのオプションがあります。
rsync
rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
backups/todays_backup
cpio
mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup
pax
mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup
cpio
は再帰コピーを直接サポートしていませんが、コピーするファイルの正確なリストを標準入力にフィードし、find
をcpio
にパイプして使用して再帰コピーの効果を実現できます。これは、オプション-T -
(標準入力からバックアップするファイルのリストを読み取ることを意味します)とともにGNU tar
を使用することに直接類似しています。
ditto yesterdays_backup todays_backup
でもあなたが望むことを達成できると思います。デフォルトでは、ditto
は、ハードリンク、ACL、および拡張属性を保持する再帰コピーを実行します。
ポールズの答えは+1。 dittoはオプションですが、findと組み合わせて使用する場合に限ります-ハードリンクは保持されますが、ディレクトリ内のみが保持されます。