GNU/Linux >> Linux の 問題 >  >> Linux

ハードリンクをシンボリックリンクに変換しますか?

ln -fを使用すると、シンボリックリンクをハードリンクに簡単に変換できます。 (例)

ハードリンク(ファイル名link)の変換も簡単です。 およびoriginallink->originalへのシンボリックリンクに戻る 両方のファイルを知っていて、どちらが「元のファイル」であるかを自分で定義する場合。簡単なスクリプトconvert-known-hardlink-to-symlinkを簡単に作成できます その結果、次のようになります:

convert-known-hardlink-to-symlink link original
$ ls -li
3802465 lrwxrwxrwx 1 14 Dec  6 09:52 link -> original
3802269 -rw-rw-r-- 1  0 Dec  6 09:52 original

ただし、作業ディレクトリを定義できるスクリプトがあれば非常に便利です。 (デフォルトの./ )および検索する検索ディレクトリ (デフォルトの/ )同じiノードを持つファイルの場合は、それらすべてのハードリンクをシンボリックリンクに変換します。

その結果、定義された作業ディレクトリで、ハードリンクであるすべてのファイルが、代わりに同じiノードを持つ最初に見つかったファイルへのシンボリックリンクに置き換えられます。

開始はfind . -type f -links +1 -printf "%i: %p (%n)n"

承認された回答:

これを行うスクリプトを作成しました。スクリプトは、作業ディレクトリ(オプションの2番目の引数)と同じソースディレクトリ(最初の引数)で見つかったすべてのハードリンクをシンボリックリンクに変換します。

https://gist.github.com/rubo77/7a9a83695a28412abbcd

ドライランのオプション-nがあり、何もしませんが、何が行われるかを示します。

主要部分:

$WORKING_DIR=./
#relative source directory from working directory:
$SOURCE_DIR=../otherdir/with/hard-links/with-the-same-inodes

# find all files in WORKING_DIR
cd "$WORKING_DIR"
find "." -type f -links +1 -printf "%i %pn" | 
  while read working_inode working_on
do
    find "$SOURCE_DIR" -type f -links +1 -printf "%i %pn" | sort -nk1 | 
      while read inode file
    do
        if [[ $inode == $working_inode ]]; then
            ln -vsf "$file" "$working_on"
        fi
    done
done

-links +1 –>複数のリンクを持つすべてのファイルを検索します。ハードリンクされたファイルのリンク数は少なくとも2つです。


Linux
  1. ls 出力を csv に変換する

  2. シンボリックリンクファイルは SVN に耐えますか?

  3. シンボリック リンクが機能しないのはなぜですか?

  1. Linuxでハードリンクとシンボリックリンクを作成する方法

  2. openssh秘密鍵をSsh2秘密鍵に変換しますか?

  3. TAR ファイルを ISO ファイルに変換する方法

  1. シンボリック リンクの環境変数

  2. シンボリックリンクを圧縮するには?

  3. 相対シンボリック リンクを移動するにはどうすればよいですか?