Jak uzyskać pełną ścieżkę do pliku?
Czy jest łatwy sposób na wydrukowanie pełnej ścieżki file.txt
?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
The <command>
dir> <command> file.txt
Powinien wydrukować
/nfs/an/disks/jj/home/dir/file.txt
30 answers
Użycie readlink:
readlink -f file.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 17:26:08
Przypuszczam, że używasz Linuksa.
Znalazłem narzędzie o nazwie realpath
w coreutils 8.15.
realpath file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt
Zgodnie z komentarzami @styropian-fly i @arch-standton, realpath
sam nie sprawdza istnienia pliku, aby rozwiązać ten problem dodaj e
argument: realpath -e file
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-12 13:15:03
Następujące zwykle robi sztuczkę:
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-30 07:45:01
Wiem, że jest łatwiejszy sposób, ale do diabła, jeśli go znajdę...
jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav
jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-18 23:22:06
find $PWD -type f | grep "filename"
Lub
find $PWD -type f -name "*filename*"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 19:20:58
W Systemie Windows:
- przytrzymanie
Shift
i kliknięcie prawym przyciskiem myszy na pliku w Eksploratorze Windows daje opcję o nazwieCopy as Path
. Spowoduje to skopiowanie pełnej ścieżki pliku do schowka.
Na Linuksie:
- możesz użyć polecenia
realpath yourfile
, aby uzyskać pełną ścieżkę pliku zgodnie z sugestiami innych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-11 15:26:26
Jeśli znajdujesz się w tym samym katalogu co Plik:
ls "`pwd`/file.txt"
Zastąp file.txt
docelową nazwą pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-14 00:43:46
Możesz użyć skryptu fpn (pełna nazwa ścieżki):
% pwd
/Users/adamatan/bins/scripts/fpn
% ls
LICENSE README.md fpn.py
% fpn *
/Users/adamatan/bins/scripts/fpn/LICENSE
/Users/adamatan/bins/scripts/fpn/README.md
/Users/adamatan/bins/scripts/fpn/fpn.py
fpn
nie jest standardowym pakietem Linuksowym, ale jest to darmowy i otwarty projekt github i możeszskonfigurować go w minutę .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 21:14:40
Działa na Mac, Linux, * nix:
To da ci zacytowany plik csv wszystkich plików w bieżącym katalogu:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
Dane wyjściowe mogą być łatwo skopiowane do listy Pythona lub dowolnej podobnej struktury danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 22:41:16
Wiem, że to już stare pytanie, ale żeby dodać do informacji tutaj:
Polecenie Linuksa which
może być użyte do znalezienia ścieżki pliku polecenia, tzn.
$ which ls
/bin/ls
Są pewne zastrzeżenia do tego; Zobacz https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 10:55:10
Możesz użyć tej funkcji. Jeśli nazwa pliku jest podana bez ścieżki względnej, wtedy zakłada się, że znajduje się w bieżącym katalogu roboczym:
abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }
Użycie:
$ abspath file.txt
/I/am/in/present/dir/file.txt
Użycie ze ścieżką względną:
$ abspath ../../some/dir/some-file.txt
/I/am/in/some/dir/some-file.txt
Ze spacjami w nazwie pliku:
$ abspath "../../some/dir/another file.txt"
/I/am/in/some/dir/another file.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 08:52:18
W podobnym scenariuszu uruchamiam skrypt cshell z innej lokalizacji. Aby ustawić poprawną ścieżkę bezwzględną skryptu tak, aby działał tylko w wyznaczonym katalogu, używam następującego kodu:
set script_dir = `pwd`/`dirname $0`
$0
przechowuje dokładny ciąg znaków, jak skrypt został wykonany.
Np. jeśli skrypt został uruchomiony w ten sposób: $> ../../test/test.csh
,
$script_dir
będzie zawierać /home/abc/sandbox/v1/../../test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-19 06:16:59
W systemie Mac OS X wymieniłem narzędzia dostarczane wraz z systemem operacyjnym i zastąpiłem je nowszą wersją coreutils. Umożliwia to dostęp do narzędzi takich jak readlink -f
(dla bezwzględnej ścieżki do plików) i realpath
(bezwzględna ścieżka do katalogów) na komputerze Mac.
Wersja Homebrew dodaje 'G '(dla narzędzi GNU) przed nazwą polecenia -- więc odpowiedniki stają się greadlink -f FILE
i grealpath DIRECTORY
.
Instrukcje jak zainstalować narzędzia coreutils / GNU na Mac OS X za pomocą Homebrew można znaleźć w ten ARCTICLE StackExchange .
Uwaga: polecenia readlink -f
i realpath
powinny działać po wyjęciu z pudełka dla użytkowników Uniksa innych niż Mac.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:45:07
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Oto wyjaśnienie co się dzieje w @ ZeRemz ' s odpowiedź :
- ten skrypt otrzymuje ścieżkę względną jako argument
"$1"
- następnie otrzymujemy dirname część tej ścieżki (możesz przekazać do tego skryptu katalog lub plik):
dirname "$1"
- następnie
cd "$(dirname "$1")
do tego względnego katalogu -
&& pwd -P
i uzyskać absolutną ścieżkę dla niego.-P
opcja uniknie wszystkich dowiązań symbolicznych - następnie dołączamy basename do ścieżki absolutnej:
$(basename "$1")
- jako ostatni krok możemy
echo
to
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:48
Możesz to zapisać w swoim shell.rc
lub po prostu umieścić w konsoli
function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"
Przykład:
ap somefile.txt
Wyświetli
/home/user/somefile.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-05 08:59:10
To działa całkiem dobrze dla mnie. Nie polega na systemie plików (pro / con w zależności od potrzeb), więc będzie szybki; i powinien być przenośny do większości * NIX . Zakłada, że przekazany ciąg jest rzeczywiście względny do PWD, a nie do innego katalogu.
function abspath () {
echo $1 | awk '\
# Root parent directory refs to the PWD for replacement below
/^\.\.\// { sub("^", "./") } \
# Replace the symbolic PWD refs with the absolute PWD \
/^\.\// { sub("^\.", ENVIRON["PWD"])} \
# Print absolute paths \
/^\// {print} \'
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-28 20:32:13
To naiwne, ale musiałem to zrobić, aby było zgodne z POSIX. Wymaga zezwolenia na cd do katalogu pliku.
#!/bin/sh
if [ ${#} = 0 ]; then
echo "Error: 0 args. need 1" >&2
exit 1
fi
if [ -d ${1} ]; then
# Directory
base=$( cd ${1}; echo ${PWD##*/} )
dir=$( cd ${1}; echo ${PWD%${base}} )
if [ ${dir} = / ]; then
parentPath=${dir}
else
parentPath=${dir%/}
fi
if [ -z ${base} ] || [ -z ${parentPath} ]; then
if [ -n ${1} ]; then
fullPath=$( cd ${1}; echo ${PWD} )
else
echo "Error: unsupported scenario 1" >&2
exit 1
fi
fi
elif [ ${1%/*} = ${1} ]; then
if [ -f ./${1} ]; then
# File in current directory
base=$( echo ${1##*/} )
parentPath=$( echo ${PWD} )
else
echo "Error: unsupported scenario 2" >&2
exit 1
fi
elif [ -f ${1} ] && [ -d ${1%/*} ]; then
# File in directory
base=$( echo ${1##*/} )
parentPath=$( cd ${1%/*}; echo ${PWD} )
else
echo "Error: not file or directory" >&2
exit 1
fi
if [ ${parentPath} = / ]; then
fullPath=${fullPath:-${parentPath}${base}}
fi
fullPath=${fullPath:-${parentPath}/${base}}
if [ ! -e ${fullPath} ]; then
echo "Error: does not exist" >&2
exit 1
fi
echo ${fullPath}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-13 03:37:00
find / -samefile file.txt -print
Znajdzie wszystkie linki do pliku o tym samym numerze i-węzła jako plik.txt
Dodanie flagi -xdev
pozwoli uniknąć przekroczenia granic urządzenia ("punktów montowania"). (Ale prawdopodobnie spowoduje to, że nic nie zostanie znalezione, Jeśli find
nie rozpocznie się w katalogu na tym samym urządzeniu, co file.txt
)
Należy zauważyć, że find
może zgłaszać wiele ścieżek dla jednego obiektu systemu plików, ponieważ i-węzeł może być połączony przez więcej niż jedną pozycję katalogu, być może nawet za pomocą różne nazwiska. Na przykład:
find /bin -samefile /bin/gunzip -ls
Wyświetli:
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/uncompress
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/gunzip
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 13:39:35
Zwykle:
find `pwd` | grep <filename>
Alternatywnie, tylko dla bieżącego katalogu:
find `pwd` -maxdepth 1 | grep <filename>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 13:54:20
Lubię wiele już udzielonych odpowiedzi, ale okazało się to bardzo przydatne, szczególnie w skrypcie, aby uzyskać pełną ścieżkę pliku, w tym następujące dowiązania symboliczne i odniesienia względne, takie jak .
i ..
dirname `readlink -e relative/path/to/file`
, który zwróci pełną ścieżkę file
począwszy od ścieżki głównej.
To może być użyte w skrypcie tak, że skrypt wie, z której ścieżki jest uruchomiony, co jest przydatne w klonie repozytorium, które może znajdować się w dowolnym miejscu na maszyna.
basePath=`dirname \`readlink -e $0\``
Mogę następnie użyć zmiennej ${basePath}
W moich skryptach, aby bezpośrednio odwoływać się do innych skryptów.
Mam nadzieję, że to pomoże,
Dave
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 12:24:35
To będzie działać zarówno dla pliku jak i folderu:
getAbsolutePath(){
[[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } ||
{ cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-06 16:58:41
Działa zarówno z Linuksem, jak i Mac OSX ..
echo $(pwd)$/$(ls file.txt)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-09 11:06:36
Inne narzędzie linuksowe, które wykonuje to zadanie:
fname <file>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 07:24:29
Dla systemu Mac OS, jeśli chcesz tylko uzyskać ścieżkę pliku w Finderze, kliknij przycisk kliknij plik i przewiń w dół do "usługi" na dole. Masz wiele opcji, w tym "Kopiuj ścieżkę" i "kopiuj pełną ścieżkę". Kliknięcie na jedną z nich powoduje umieszczenie ścieżki w schowku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 01:06:04
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}
Kopiuje tekst do schowka i wyświetla tekst w oknie terminala.
:)
(skopiowałem część kodu z innej odpowiedzi przepełnienia stosu, ale nie mogę już znaleźć tej odpowiedzi)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 16:11:45
Najprostszy sposób jaki znalazłem to
for i in `ls`; do echo "`pwd`/$i"; done
To działa dobrze dla mnie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 10:41:46
W systemie Mac OSX wykonaj następujące kroki:
-
cd
do katalogu docelowego pliku. - wpisz jedno z poniższych poleceń terminala.
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
- Zastąp
file.txt
swoją rzeczywistą nazwą pliku. - Naciśnij Enter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-06 13:44:26
Obok "readlink-f", inne powszechnie używane polecenie:
$find /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile /the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile $
To również podaje pełną ścieżkę i nazwę pliku w konsoli
Off-topic: ta metoda daje po prostu względne Linki, a nie absolutne. Polecenie readlink -f
jest właściwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-21 13:24:56
Utwórz funkcję podobną do poniższej (wyświetla ścieżkę bezwzględną pliku z pwd i dodaje plik na końcu ścieżki:
abspath() { echo $(pwd "$1")/"$1"; }
Teraz możesz znaleźć dowolną ścieżkę do pliku:
abspath myfile.ext
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 23:48:30
Aby uzyskać pełną ścieżkę do pliku:
1) Otwórz terminal w folderze zawierającym plik , naciskając na klawiaturze następujące klawisze:
CTRL + ALT + T
2) Następnie wpisz "pwd" (akronim P Nazwa rint W orking D irectory):
your@device ~ $ pwd
To wszystko!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-16 15:34:42