it-mure.jp.net

シンボリックリンクを逆参照するUNIXコマンド?

シンボリックリンクを逆参照するためのUNIXコマンドはありますか?リンクを、それが指すファイルのコピーに置き換えたいと思います。

例:

$ ls
a
b -> a

$ deref b
$ ls 
a
b

これで、aとbの内容は同じですが、互いに独立しています。私の質問は、そのようなderefコマンドがあるかどうかです。重要:bがどこを指しているのかを知る必要はありません。コマンドはそれを理解する必要があります。

6
dehmann

readlinkを使用してファイル名を見つけることができますが、そうする必要はありません。

cp b c
mv c b

とても簡単です。そのためのスクリプトを作成している場合は、mktempの代わりにcの出力を使用して、既存のファイルcをオーバーライドしないようにする必要があります。

10
Roman Cheplyaka

両方の答えを組み合わせると、次のようになります。

#!/bin/bash

if [ -h "$1" ] ; then
  target=`readlink $1`
  rm "$1"
  cp "$target" "$1"
fi
4
phlogratos

シンボリックリンクが指しているものをコピーすることで可能です...

readlink(1) および cp(1) を参照してください。 Update:そしてあなたがそれにいる間: readlink(2)

[〜#〜] but [〜#〜]シンボリックリンクは実際にはそれだけであり、シンボリックです(読み取り:ターゲットの名前を使用)別のファイルへのリンク-他のファイルのコンテンツを共有しません。 (ハードリンク、誰か?)。

3

そのようなコマンドはありませんが、次のことができます。

rm b
cp a b
0
ennuikiller