Untuk digunakan dalam skrip shell, saya mencari cara baris perintah untuk mendapatkan tujuan tautan simbolik. Yang paling dekat saya sejauh ini adalah stat -N src
, yang keluaran src -> dst
. Tentu saja saya dapat mengurai output dan mendapatkan dst
, tetapi saya ingin tahu apakah ada cara langsung untuk mendapatkan tujuan.
command-line
symlink
gerrit
sumber
sumber
readlink -f
jika Anda ingin mengetahui target symlink terakhir dan tidak hanya yang berikutnya .-f
adalah ekstensi non-portabel ke GNUreadlink
.Di Mac OS X dan FreeBSD / NetBSD / dll. nya:
Secara lebih umum saya kira solusinya adalah (stat --printf =% N menggunakan kutipan aneh):
Contoh:
Metode lain adalah:
Baris terakhir hancur karena tidak memiliki baris baru, tetapi itu bagus jika Anda membutuhkan hasil dalam variabel, seperti itu
The
-maxdepth
diperlukan untuk mencegahfind
dari turun ke direktori jikab
terjadi menjadi sebuah direktori.sumber
stat --printf='%N\n'
persis seperti yang saya inginkan, kutipan aneh tidak mengganggu saya, mereka adalah kutipan yang sama rm dan lnlink -> dest
dalam output. Solusi find (1) harus diperiksa apakah itu dengan GNU findutils atau lainnya ...echo $f
tentu saja tidak menghasilkan apa yang Anda harapkan ketika symlink menunjuk ke/*
(ya itu mungkin)Hal ini dapat dilakukan dengan menggunakan GNU
find
:find src -prune -printf "%l\n"
.sumber
Portable: tidak beruntung kecuali menggunakan heuristik untuk mem-parsing output ls-l, atau gunakan
perl -le 'print readlink("some-file")'
beberapa sistem memiliki
readlink
perintah, beberapa dengan-f
opsi untuk mendapatkan jalur absolut.Ada berbagai implementasi
stat
perintah sebagai pembungkus untuk panggilan sistemstat
/lstat
. GNU satu tidak berguna dalam hal itu, tetapi zsh's builtin satu lebih dari itu:Masih dengan zsh, Anda bisa mendapatkan path absolut dari file (menghapus setiap komponen symlink) dengan
:A
pengubah (berlaku untuk ekspansi variabel, ekspansi sejarah, dan globbing:sumber
Pada sistem di mana saya tidak punya
readlink
ataustat
perintah tapi aku punya Python 2.x, saya menggunakan script singkat:Perhatikan bahwa tidak seperti
readlink -f
ini, hanya dapat mengikuti satu tingkat symlink.sumber
Portable Bash realpath murni
sumber
realpath
perintahcoreutils
paket,sebagaimana ditautkan dalam
readlink
halaman buku panduan perintah.sebagai contoh:
output
di mesin saya.
sumber