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
Author: Jean, 2011-03-10

30 answers

Użycie readlink:

readlink -f file.txt
 1311
Author: filmor,
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

 262
Author: lllllllllllll,
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")"
 83
Author: ZeRemz,
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
 44
Author: jcomeau_ictx,
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*"
 29
Author: Anshul Gupta,
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 nazwie Copy 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.
 20
Author: Natesh bhat,
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.

 18
Author: Steven,
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ę .

 5
Author: Adam Matan,
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.

 4
Author: Bhargav Srinivasan,
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/.

 3
Author: Lord Cat,
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
 3
Author: Ramu,
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

 2
Author: Ackq,
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.

 2
Author: JacobWuzHere,
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ź :

  1. ten skrypt otrzymuje ścieżkę względną jako argument "$1"
  2. następnie otrzymujemy dirname część tej ścieżki (możesz przekazać do tego skryptu katalog lub plik): dirname "$1"
  3. następnie cd "$(dirname "$1") do tego względnego katalogu
  4. && pwd -P i uzyskać absolutną ścieżkę dla niego. -P opcja uniknie wszystkich dowiązań symbolicznych
  5. następnie dołączamy basename do ścieżki absolutnej: $(basename "$1")
  6. jako ostatni krok możemy echo to
 2
Author: Eugen Konkov,
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
 2
Author: Roman Rhrn Nesterov,
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} \'
}
 1
Author: Russell Speight,
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}
 1
Author: Andrew Miller,
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
 0
Author: wildplasser,
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>
 0
Author: sjas,
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

 0
Author: Dave Rix,
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")"; }
}
 -1
Author: Jahid,
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)
 -1
Author: Ahmed Abobakr,
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>
 -1
Author: BluVio,
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.

 -1
Author: Richard Sharpe,
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)

 -2
Author: Dhruv,
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

 -2
Author: onkar,
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:

  1. cd do katalogu docelowego pliku.
  2. wpisz jedno z poniższych poleceń terminala.
Terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Zastąp file.txt swoją rzeczywistą nazwą pliku.
  2. Naciśnij Enter
 -2
Author: Let Me Tink About It,
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.

 -3
Author: Andrew_1510,
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
 -3
Author: Nestor Urquiza,
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!
 -3
Author: marcdahan,
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