realpath bierze dowolną ścieżkę — względną, z dowiązaniami symbolicznymi, z kropkami . i .. — i zamienia ją na jedną, kanoniczną ścieżkę bezwzględną. Innymi słowy: mówisz mu „gdzie tak naprawdę jest ten plik?”, a on rozwija wszystkie skróty i symlinki i daje konkretną odpowiedź od korzenia /. To narzędzie z pakietu GNU coreutils, więc znajdziesz je praktycznie na każdym Linuksie. Bezcenne w skryptach, gdzie nie chcesz zgadywać, czy ktoś odpalił Cię z innego katalogu.
Składnia i najważniejsze opcje
Podstawowa forma to realpath [OPCJE] PLIK... — możesz podać jeden lub wiele plików naraz.
-e, --canonicalize-existing— wszystkie komponenty ścieżki muszą istnieć, inaczej błąd.-m, --canonicalize-missing— żaden komponent nie musi istnieć (przydatne, gdy budujesz ścieżkę pod plik, którego jeszcze nie ma).-s, --strip, --no-symlinks— nie rozwijaj dowiązań symbolicznych, tylko uporządkuj ścieżkę.--relative-to=DIR— wypisz wynik jako ścieżkę względną do podanego katalogu.--relative-base=DIR— ścieżki w obrębieDIRpokaż względnie, resztę bezwzględnie.-z, --zero— kończ każdą linię bajtem NUL zamiast nową linią (doxargs -0).-q, --quiet— wycisz komunikaty o błędach.-L, --logical/-P, --physical— przetwarzaj..przed dowiązaniami / rozwijaj dowiązania (domyślne).
Przykłady użycia
realpath plik.txt— pokaże pełną ścieżkę bezwzględną do pliku w bieżącym katalogu.realpath ../logi/./app.log— uprzątnie..i.i da czystą ścieżkę kanoniczną.realpath /var/log/syslog— jeśli to symlink, zobaczysz, do jakiego prawdziwego pliku prowadzi.realpath -m /opt/app/cache/nowy.tmp— zwróci pełną ścieżkę, nawet gdy plik jeszcze nie istnieje.realpath --relative-to=/home/jan ~/projekty/api— pokaże ścieżkę względną, np.projekty/api.
Częste błędy i pułapki
Po pierwsze: na macOS i BSD realpath bywa inny niż wersja GNU — część flag (np. --relative-to) tam nie istnieje. Jeśli piszesz przenośny skrypt, sprawdź, z czym masz do czynienia, albo użyj readlink -f. Po drugie: bez -m wskazanie nieistniejącego pliku skończy się błędem i pustym wynikiem — łatwo się na tym przejechać w skryptach, które dopiero tworzą pliki. Po trzecie: pamiętaj, że -s NIE rozwija symlinków, więc jeśli zależy Ci na „prawdziwej” lokalizacji za dowiązaniem, tej flagi nie używaj. I drobiazg: realpath niczego nie zmienia na dysku — tylko liczy i wypisuje ścieżkę, więc możesz go odpalać bez stresu.
Powiązane komendy: readlink, dirname, basename, pwd, cd.