Saya memiliki aplikasi web yang memiliki banyak tautan simbolik di dalam subdirektori di dalamnya. Saya perlu memindahkan aplikasi ke struktur direktori lain, dan saya perlu memperbarui semua symlink untuk menunjuk ke jalur baru. Sebagai contoh:
Dir Lama: Dir /home/user/public_html/dev
Baru: /home/user/public_html/qa
Symlink Lama: /home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/dev/images
Symlink Baru:/home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/qa/images
Masalahnya adalah bahwa ada banyak ini tersebar di berbagai direktori. Bagaimana saya bisa secara rekursif mencari dari akar dan menciptakan semua symlink menunjuk ke /dev/
dengan /qa/
?
sumber
find /home/user/public_html/qa/ -type l -lname '/home/user/public_html/dev/*'
tidak menghasilkan apa-apa.find /home/usr/public_html/qa/ -type l
? Jika itu tidak menemukan tautan, sesuatu yang sangat aneh terjadi pada sistem Anda.find /home/user/public_html/qa/ -type l
" menghasilkan tautan. Tetapi menambahkan -lname parameter itu tidak menghasilkan apa-apa.Jika ada orang lain yang menemukan ini ketika mencari solusi: Buat file bernama "linkmod.sh" yang mengandung:
dan lari
Anda dapat menggunakan opsi -l dalam menemukan jika diperlukan.
CATATAN: Anda harus menggunakan 2x \ dalam pola sebelum karakter apa pun yang memerlukan \ sed, karena gema menghapus satu. Sebagai contoh
Hapus
echo
dari baris terakhir jika perintah ln benar.sumber
echo
di garis akhir dari naskah danecho
difind .. | xargs .. linkmod.sh ...
perintah itu sendiri baik perlu dihapus.Saya membuat skrip bash
link_rename.sh
untuk mengubah nama tautan simbolik secara rekursif dalam direktori yang diberikanIni dapat dieksekusi sebagai
link_rename.sh /home/human/dir link1 link2
Script memiliki 3 argumen:
link1
pola lama yang akan digantilink2
adalah pola baru yanglink1
akan digantiScript secara rekursif membaca semua symlink di direktori menggunakan
find "$DIR" -type l
dan memprosesnya baris demi baris.$line
adalah symlink yang perlu diganti namanyaCUR_LINK_PATH
adalah jalan lamaNEW_LINK_PATH
diperoleh dengan melakukan penggantian string di jalur tautan lama.Symlink lama dihapus dan symlink baru dibuat menggunakan
ln -s "$NEW_LINK_PATH" "$line"
sumber
Saya akhirnya menulis skrip PHP command-line yang tampaknya melakukan trik.
sumber