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.