mv file tanpa memutus symlink ke file itu

24

Apakah mungkin untuk mvfile tanpa memutus tautan simbolik ke file itu? Tanggapan awal saya untuk ini adalah tidak, dan saya sedang mengerjakan solusi berbasis skrip untuk mengubah tautan segera setelah pindah, tetapi saya bertanya-tanya bagaimana orang lain telah mendekati masalah ini. Jalur dan nama symlink diketahui sebelumnya, jadi secara teori yang perlu saya lakukan adalah:

  1. dapatkan target tautannya
  2. mv target
  3. buat ulang tautan ke target baru
  4. buat tautan baru ke target baru (berbeda dari tautan asli, yang masih ingin saya pertahankan untuk saat ini)

Di kemudian hari:

  1. hapus tautan lama

1-4 akan dienkapsulasi dalam skrip bash, tapi saya ingin tahu apakah ada yang memiliki pendekatan yang lebih elegan, atau mengetahui built-in atau perintah yang tidak saya sadari.

kawan
sumber
2
Tautan keras tidak memiliki masalah ini. Mereka memiliki kelemahan lain. :-)
Stéphane Gimenez
3
Ya, tidak dapat menggunakan hardlink karena file-file tersebut melintasi beberapa sistem file.
gabe.
2
Juga: tidak dapat menghubungkan ke direktori.
sampablokuper

Jawaban:

8

Anda berada di jalur yang benar, saya rasa tidak ada cara yang lebih mudah daripada urutan yang Anda gambarkan.

Langkah 3 dan 4 agak membingungkan. Jika Anda ingin menargetkan ulang tautan yang ada dengan nama yang sama dapat Anda gunakan ln -funtuk menimpa file yang ada. Jika Anda ingin nama tautan Anda juga berubah untuk mencerminkan nama target baru, urutan Anda sudah benar.

Caleb
sumber
1
Heh, ya, baru baca ulang bagian itu dan sekarang saya sudah bingung juga. Saya akan mengubahnya sehingga lebih masuk akal. Terima kasih.
gabe.
Saya agak bingung tentang penggunaan ln -f, tapi saya pikir script @fred yang diposting dapat membantu memperjelas cara kerjanya. Halaman manual itu tidak banyak membantu, anehnya.
gabe.
@ gabe. Versi asli dari jawaban saya memiliki jawaban yang benar -s -f, tetapi ketika sedang memperbaikinya , jawaban itu "kehilangan" -s: salah! Dari wikipedia : 'ln' tanpa opsi membuat tautan keras, 'ln -f' memaksa tautan keras ... jadi terima kasih atas pertanyaannya, itu benar-benar telah mengkonfirmasi sintaks untuk saya sekarang .. Itu pasti membuat saya memeriksa ulang hal-hal ... Itu membutuhkan ln -s -f.. (Saya telah membuat penyesuaian)
Peter.O
4

Untuk situasi Anda:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
Peter.O
sumber
Catatan: akan lebih rumit jika rantai tautan terlibat.
Peter.O
0

Saya punya masalah selanjutnya. Saya menemukan tema ikon yang sangat baik disebut "Suru ++"

Suru ++ 20 [Secara resmi bebas bug dan kompatibel dengan 11 DEs]

Tapi tema ikon ini dibuat di svg semua gambar. Sekarang saya ingin menggunakannya di Fluxbox dan menghasilkan entri menu tapi ini hanya mungkin dengan ikon gambar png. Saya mengunduh master di dalamnya yang semuanya ikon dalam format svg, dan ya saya bisa mengonversi dari baris perintah svg ke png semua ok menghasilkan untuk setiap ukuran folder seperti 16x16, 24x24 px. Tetapi dalam folder itu adalah tautan simbolis ke file svg:

ekstensi svg di dalam tautan simbolik yang ingin saya ubah ke png

Jika ada cara yang memungkinkan untuk mengubah ekstensi svg ke png di dalam semua tautan symbolix tema ikon akan berfungsi dengan baik di menu Fluxbox dan Manajer File. Saya membuat entrie tentang tema ikon ini menggunakan di Xubuntu tetapi dalam bahasa Spanyol

Tuhan memberkati

Indacochea Wachín
sumber