コマンドcp
ページには次のinfo
オプションがあります。--preserve=
links
ターゲットファイルの対応するソースファイル間のリンクを保持します。気づく-H 'を使用すると、-L' or
このオプションはできるシンボリックリンクをハードリンクに変換。
以下は、とにかく今は理解できない例です。
質問:ソフトリンクをハードリンクに変換するにはcp
? [ハードリンクをソフトリンクに変換]方法はありますか?
マイナーな問題:どこできる上記の引用で役に立ちますか?私は-L
目的を理解し、フル機能の-H
ソフトリンクなどをコピーできますが、これまでソフトリンクをハードリンクに切り替えることはできませんでした。
ベストアンサー1
情報ページの例は、この例が少し難しいことを示しています。
$ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
74161745 a
74161745 b
これをコンポーネントコマンドに分類しましょう。
mkdir c;
: ディレクトリの作成c/
: > a;
:空のファイルを作成する簡単な方法です。は何もしない bash 組み込みと同じです。を参照echo "" > a
してください。:
help :
ln -s a b
a
:通話できるソフトリンクを作成しますb
。このとき、現在のディレクトリの内容は次のとおりです。$ ls -l | cc2ter total 4 -rw-r--r-- 1 terdon terdon 0 Oct 9 02:50 a lrwxrwxrwx 1 terdon terdon 1 Oct 9 02:50 b -> a drwxr-xr-x 2 terdon terdon 4096 Oct 9 02:50 c
これは
b
シンボリックリンク(ソフトリンク)であり、次のものと同じinodeを指していませんa
。$ ls -i1c a b 16647344 a 16647362 b
cp -aH a b c;
:ファイルをディレクトリa
にコピーします。ここで変換が発生し、渡されるオプションは次のとおりです。b
c
cp
-a, --archive same as -dR --preserve=all -d same as --no-dereference --preserve=links -H follow command-line symbolic links in SOURCE
これは
-H
以下の理由で必要ですinfo cp
。シンボリックリンクからコピーするとき、「cp」は通常、再帰なしでコピーするときにリンクだけに従います。
-a
再帰コピー(-R
)が有効になっているため、シンボリック-H
リンクに従う必要があります。-H
これは、再帰にもかかわらずリンクが追跡され続け、その結果、ターゲットディレクトリにハードリンクが確立されることを意味します。これはc/
最後のステップの後に来るものです(最初の列はinode番号です)。$ ls -li c total 0 17044704 -rw-r--r-- 2 terdon terdon 0 Oct 9 02:50 a 17044704 -rw-r--r-- 2 terdon terdon 0 Oct 9 02:50 b
これが正確にどのように機能するかについて、次の場合にシンボリックリンクをハードリンクとして使用、cp --preserve=links
結合-L
、または変換することで把握できます。-H
リンクと宛先の両方がコピーされます。同じ目次。
実はOPとして発見する少なくとも Debian システムでは、cp --preserve=links
ターゲットディレクトリが同じであれば、シンボリックリンクをハードリンクに変換するだけで十分です。