Do użycia w skrypcie powłoki szukam sposobu wiersza polecenia, aby uzyskać miejsce docelowe dowiązania symbolicznego. Najbliższe, do jakiego do tej pory doszedłem, to stat -N src
jakie wyniki src -> dst
. Oczywiście mógłbym przeanalizować dane wyjściowe i uzyskać dst
, ale zastanawiam się, czy istnieje jakiś bezpośredni sposób na uzyskanie celu.
command-line
symlink
gerrit
źródło
źródło
readlink -f
jeśli chcesz znać ostatni cel dowiązania symbolicznego, a nie tylko następny .-f
jest to nieprzenośne rozszerzenie GNUreadlink
.W systemie Mac OS X i FreeBSD / NetBSD / itp. jego:
Bardziej ogólnie wydaje mi się, że rozwiązaniem jest (stat --printf =% N używa dziwnych cudzysłowów):
Przykład:
Inną metodą jest:
Ostatnia linia jest zniekształcona, ponieważ nie ma nowej linii, ale to dobrze, jeśli potrzebujesz wyniku w zmiennej, takiej jak
Jest
-maxdepth
to konieczne, aby zapobiecfind
zstępowaniu do katalogów, jeślib
jest to katalog.źródło
stat --printf='%N\n'
jest dokładnie tym, czego chcę, dziwne cytaty mi nie przeszkadzają, ich te same cytaty rm i lnlink -> dest
na wyjściu. The (1) rozwiązanie znajdź powinny być sprawdzane, czy to z findutils GNU albo inaczej ...echo $f
pewnością nie daje to, czego oczekujesz, gdy dowiązanie symboliczne wskazuje/*
(tak, jest to możliwe)Można to zrobić za pomocą GNU
find
:find src -prune -printf "%l\n"
.źródło
Przenośne: bez powodzenia, z wyjątkiem użycia heurystyki do analizy danych wyjściowych ls -l lub użycia
perl -le 'print readlink("some-file")'
niektóre systemy mają
readlink
polecenie, niektóre z-f
opcją uzyskania bezwzględnej ścieżki.Istnieją różne implementacje
stat
polecenia jako opakowania dla wywołań systemowychstat
/lstat
. GNU jeden nie jest pod tym względem użyteczny, ale wbudowany w Zsh jest bardziej:Nadal dzięki Zsh możesz uzyskać bezwzględną ścieżkę do pliku (usuwa każdy komponent dowiązania symbolicznego) za pomocą
:A
modyfikatora (dotyczy rozwijania zmiennych, rozszerzania historii i globowania:źródło
W systemie, w którym nie mam poleceń
readlink
lubstat
poleceń, ale mam Python 2.x, używam krótkiego skryptu:Zauważ, że w przeciwieństwie do
readlink -f
tego może występować tylko jeden poziom dowiązania symbolicznego.źródło
Przenośna ścieżka real Bash
źródło
realpath
poleceniecoreutils
pakietu,zgodnie z linkiem
readlink
na stronie podręcznika polecenia.na przykład:
wyjścia
na mojej maszynie.
źródło