Làm cách nào để chuyển đổi các liên kết tượng trưng tương đối thành các liên kết tượng trưng tuyệt đối trong bash?chuyển đổi các liên kết tượng trưng tương đối thành các liên kết tượng trưng tuyệt đối
Trả lời
ln -sf "$(readlink -f "$link")" "$link"
+1, không biết về các tùy chọn chuẩn hóa cho readlink! – Flexo
Bạn có thể thực hiện việc này cho tất cả các liên kết tượng trưng trong thư mục làm việc hiện tại bằng cách sử dụng: 'find ./ -type l -execdir bash -c 'ln -sfn' $ (readlink -f" $ 0 ")" "$ 0" '{} \ ; ' –
Đối với các liên kết tượng trưng trỏ đến các thư mục không thành công: nó tạo các liên kết mới có cùng tên trong thư mục (ví dụ: foo -> ../foo bạn nhận foo/foo ->/abs/path/to/foo) . –
Chỉ trong trường hợp ai đó tìm kiếm hoạt động ngược lại: chuyển đổi từ các liên kết tuyệt đối tương đối:
Sử dụng python:
find . -lname "`pwd`*" -exec sh -c 'ln -snvf `python -c "from os.path import *; print relpath(\"$(readlink {})\",dirname(\"{}\"))"` {}' \;
Chỉ sử dụng bash và sed:
find . -lname "`pwd`/*" -depth 1 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|.|"` {}' \;
find . -lname "`pwd`/*" -depth 2 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|..|"` {}' \;
find . -lname "`pwd`/*" -depth 3 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|../..|"` {}' \;
etc....
Điều này sẽ chuyển đổi tất cả các liên kết tuyệt đối trong các thư mục con thành các liên kết tương đối.
Ngoài ra còn có một gói symlink có sẵn: 'symlinks -a/path/to/modify' http://linux.die.net/man/8/symlinks – pztrick
Thật không may nó không có sẵn trên một số hệ điều hành. ; ( –
Bạn có thể tải xuống tệp nguồn Debian và chỉ chạy 'gcc symlinks.c -o/usr/local/bin/symlinks'. Có vẻ như không phụ thuộc vào bất kỳ điều gì khác. Http://http.debian.net/ debian/pool/main/s/symlinks/symlinks_1.4.orig.tar.gz – pztrick
Dựa trên câu trả lời @ thkala, tôi bổ sung này để .bashrc của tôi:
function lnabs {
#http://stackoverflow.com/questions/4187210/convert-relative-symbolic-links-to-absolute-symbolic-links
ln -sf "$(readlink -f "$1")" "$*"
}
Ý anh là gì bởi "đệ quy"? – thkala