Aby uzyskać pełną ścieżkę, użyj:
readlink -f relative/path/to/file
Aby uzyskać katalog pliku:
dirname relative/path/to/file
Możesz również połączyć te dwa elementy:
dirname $(readlink -f relative/path/to/file)
Jeśli readlink -f
nie jest dostępny w Twoim systemie, możesz użyć tego * :
function myreadlink() {
(
cd "$(dirname $1)"
echo "$PWD/$(basename $1)"
)
}
Zauważ, że jeśli potrzebujesz tylko przenieść się do katalogu pliku określonego jako ścieżka względna, nie musisz znać ścieżki bezwzględnej, ścieżka względna jest całkowicie legalna, więc po prostu użyj:
cd $(dirname relative/path/to/file)
jeśli chcesz wrócić (podczas działania skryptu) do oryginalnej ścieżki, użyj pushd
zamiast cd
, i popd
kiedy skończysz.
* Chociaż myreadlink
powyższe jest wystarczająco dobre w kontekście tego pytania, ma pewne ograniczenia w stosunku do readlink
narzędzia sugerowanego powyżej. Na przykład nie podąża poprawnie za łączem do pliku z innym rozszerzeniem basename
.