GNU/Linux >> Belajar Linux >  >> Linux

Ubah Hardlink Menjadi Tautan Simbolik?

Sangat mudah untuk mengubah symlink menjadi hardlink dengan ln -f (contoh)

Juga akan mudah untuk mengonversi hardlink (nama file link dan original ) kembali ke tautan simbolis ke link->original dalam kasus di mana Anda mengetahui kedua file dan menentukan sendiri mana yang merupakan "file asli". Anda dapat dengan mudah membuat skrip sederhana convert-known-hardlink-to-symlink yang akan menghasilkan sesuatu seperti:

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

Tetapi akan sangat berguna jika Anda memiliki skrip tempat Anda dapat mendefinisikan direktori kerja (default ./ ) dan direktori penelusuran tempat menelusuri (default / ) untuk file dengan inode yang sama dan kemudian mengonversi semua tautan keras tersebut menjadi tautan simbolik.

Hasilnya adalah bahwa di direktori kerja yang ditentukan, semua file yang merupakan tautan-keras diganti dengan tautan-simbolis ke file yang pertama kali ditemukan dengan inode yang sama.

Awalannya adalah find . -type f -links +1 -printf "%i: %p (%n)n"

Jawaban yang Diterima:

Saya membuat skrip yang akan melakukan ini. Script mengonversi semua tautan keras yang ditemukan di direktori sumber (argumen pertama) yang sama seperti di direktori kerja (argumen kedua opsional) menjadi tautan simbolik:

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

Ini memiliki opsi -n untuk dry-run, yang tidak melakukan apa pun selain menunjukkan apa yang akan dilakukan.

Bagian utama:

$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

The -links +1 –> Akan menemukan semua file yang memiliki LEBIH dari 1 link. File tertaut keras memiliki jumlah tautan setidaknya dua.


Linux
  1. Variabel lingkungan dalam tautan simbolik

  2. Bagaimana cara mengompres tautan simbolik?

  3. Bagaimana cara memindahkan tautan simbolik relatif?

  1. kesalahan ldconfig:bukan tautan simbolik

  2. Ubah keluaran ls menjadi csv

  3. membuat tautan simbolik:Kesalahan protokol

  1. Bagaimana cara menghapus tautan simbolik ke direktori?

  2. Apakah file tautan simbolik bertahan dari SVN?

  3. Mengapa tautan simbolik saya tidak berfungsi?