時々、サーバー上のデータファイルに対していくつかの大きな移行の変更を行う必要があり、これを行うための良い方法を探しています。 rsyncを使用してルートデータフォルダーから始まるディレクトリ構造を複製し、すべての元のファイル(一部はかなり大きい)へのハードリンクを作成することを考えていました。移行先のツリーでは、移行が必要なファイルのみを上書きできます。最後に、2つのmv
操作で古いファイルから新しいファイルに安全に切り替えることができます。
しかし、私はrsyncにこれを実行させることができないようです。私は試した
rsync -a --link-dest=$DATA $DATA $DATA/../upgrade_tmp
しかし、ファイルへのハードリンクを作成する代わりに、rsyncはそれらを完全にコピーします。同じソースとリンク先ディレクトリを使用して問題がありますか?
rsync
は強力なツールですが、残念なことに、そのパス名のいくつかについて奇妙にうるさいです。
$DATA
が絶対パスの場合(つまり、/
で始まる場合)、使用する正しいコマンドラインは次のとおりです。
rsync -a --link-dest=$DATA $DATA/ $DATA/../upgrade_tmp
[さて、rsync
の奇妙さについて少しお話ししましょう。末尾の/
がソース引数に追加されていることに注意してください。これは、ソースディレクトリ自体ではなく、ソースディレクトリのcontentsを操作するようにrsync
に指示します。 ($DATA
には末尾の/
がまだ含まれていないと想定しています。)この場合、コンテンツを操作するため、末尾の/
。]を追加します。
一方、$DATA
が相対パスである場合(つまり、/
で始まっていない場合)、--link-dest
に関するSean Rのコメントは次のようになります。リンク先パスdestinationパスを基準にして解釈されるため、次を使用します。
rsync -a --link-dest=../`basename $DATA` $DATA/ $DATA/../upgrade_tmp
[〜#〜]編集[〜#〜]
最後の注意点として、rsync
はパスを認識しないため、$DATA
が絶対パスかどうかに関係なく、2番目のbasename
コマンドラインは機能するはずです。絶対または相対です。
あなたが欲しいのは「cp -al」です:
cp -al $DATA/ $DATA/../upgrade_tmp/
rsync -a
のように再帰します他のツールよりもrsync
を使用する方が難しいことがわかりました。 rsync
の正しい答えはSteven Monaiの答えですが、これを行う最も簡単な方法は、どちらかを使用することですcp -al
またはpax -rwl
のシステムでは-l
はcp
の有効なオプションではありません:
pax -rwl $DATA $DATA/../upgrade_tmp
または
cp -al $DATA/ $DATA/../upgrade_tmp/
rsync
の--link-dest
オプションは、現在のディレクトリではなくdestinationディレクトリを基準にしています。だからあなたが欲しいのは:
rsync -a --link-dest=../`basename $DATA` $DATA $DATA/../upgrade_tmp
わたしにはできる:
$ rsync --hard-links --recursive --link-dest=/local user@Host:/remote/ /local
私はrsyncバージョン3.1.0を使用しています。
man から:
-hard-links
転送でハードリンクされたファイルを探すようにrsyncに指示します。このオプションがない場合、転送でハードリンクされたファイルは個別のファイルであるかのように扱われます。
-link-dest = DIR
変更されていないファイルは、DIRから宛先ディレクトリにハードリンクされます。ファイルがリンクされるためには、保存されているすべての属性(権限、場合によっては所有権など)が同じでなければなりません。
まず、宛先にのみディレクトリを作成します。
rsync -av --include '*/' --exclude '*' /source/ /destination/
次に、ファイルのみをハードリンクします。
cd /source
find . -type f -exec ln -v {} /destination/{} \;
次のリンクを試すことができます http://www.lessfs.com/wordpress/ 作業中です [〜#〜] cow [〜#〜] (書き込み時にコピー)時間とスペースを節約できます
オプション-Hを使用してハードリンクを保持し、マンページを読みます。