Powiedz, że skonfigurowałem dowiązanie symboliczne:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
czy jest sposób, aby zobaczyć, do czego cel myothertextfile.txt
używa linii poleceń?
Powiedz, że skonfigurowałem dowiązanie symboliczne:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
czy jest sposób, aby zobaczyć, do czego cel myothertextfile.txt
używa linii poleceń?
Użyj -f
flagi, aby wydrukować wersję kanoniczną. Na przykład:
readlink -f /root/Public/myothertextfile.txt
Od man readlink
:
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
readlink -f
.brew install coreutils
. To instaluje podstawowe wersje GNU poleceń poprzedzonych literąg
, tj.greadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
stronach readlink znajduje się informacja „Uwaga realpath (1) jest preferowanym poleceniem używanym do funkcji kanonizacji”.readlink to polecenie, które chcesz. Powinieneś spojrzeć na stronę podręcznika dla polecenia. Ponieważ jeśli chcesz śledzić łańcuch dowiązań symbolicznych do rzeczywistego pliku, potrzebujesz przełącznika -e lub -f:
źródło
Będzie to również działać:
ale
readlink
byłby preferowany do użycia w skrypcie zamiast analizyls
.źródło
Jeśli chcesz pokazać źródło i miejsce docelowe linku, spróbuj
stat -c%N files*
. Na przykładNie nadaje się do parsowania (użyj
readlink
do tego), ale pokazuje nazwę i miejsce docelowe linku, bez bałaganuls -l
-c
można zapisać--format
i%N
oznacza „cytowaną nazwę pliku z dereferencją w przypadku dowiązania symbolicznego”.źródło
To
readlink
dobra rzecz, ale specyficzna dla GNU i nieprzenikająca między platformami. Kiedyś pisałem skrypty dla wielu platform/bin/sh
, dlatego używałbym czegoś takiego:lub:
ale należy je przetestować na różnych platformach. Myślę, że będą działać, ale nie są w 100% pewni
ls
formatu wyjściowego.Wynikiem
ls
może być również przetwarzane w ciągubash
bez konieczności polegania na zewnętrznym poleceniemawk
,sed
lubperl
.Ta
bash_realpath
funkcja rozwiązuje ostateczne miejsce docelowe łącza (link → link → link → final):źródło
Jeśli nie możesz użyć
readlink
, wówczas parsowanie wynikuls -l
może być wykonane w ten sposób.Normalny wynik to:
Chcemy więc zamienić wszystko przed „->” i dołączoną strzałką. Przydałoby się
sed
do tego:źródło
Pytanie nie jest wystarczająco dokładne, aby dać prostą odpowiedź na pytanie brian-brazil:
faktycznie odrzuci każde dowiązanie symboliczne zaangażowane w konstrukcję ścieżki do końcowego celu z tyłu
some_path
.Ale jeden poziom kaskadowych dowiązań symbolicznych jest tylko szczególnym przypadkiem między innymi w systemie, przy czym ogólny przypadek to N poziomów kaskadowych dowiązań symbolicznych. Spójrz na następujące elementy w moim systemie:
rwhich
jest moją własną rekurencyjną implementacją,which
która drukuje wszystkie pośrednie kaskadowe dowiązania symboliczne (do stderr) aż do ostatecznego celu (do stdout).Jeśli chcę wiedzieć, co to jest:
cel dowiązania symbolicznego / usr / bin / emacs **, oczywista odpowiedź brzmi
/etc/alternatives/emacs
:ostateczny cel za kaskadowe dowiązania symboliczne / usr / bin / emacs, odpowiedź musi być
/usr/bin/emacs24-x
zwrócony przez:źródło
ll
lubls -l
powinien wyświetlić listę elementów katalogu, w tym symboliczny link i jego celcd -P /root/Public/myothertextfile.txt
(w twoim przypadku) powinien wskazywać na oryginalną ścieżkęźródło
Jeśli znajdziesz cel wszystkich łączy w folderze i jego podfolderze, użyj
find . -type l -ls
polecenia z typem łącza w następujący sposób:Jeśli chcesz cel pojedynczego,
ls -l
powinien działać:źródło