Jak wyświetlić pełną ścieżkę pliku wraz z pełną nazwą pliku w terminalu Mac OSX?

40

„ls” może wyświetlać nazwę pliku, np

ls config.inc.php
config.inc.php 

„pwd” pokazuje pełną ścieżkę bieżącego folderu, np

pwd
/Application/XAMPP/xamppfiles/phpmyadmin

Czy istnieje polecenie, które może je połączyć, będzie w stanie pokazać:

/Application/XAMPP/xamppfiles/phpmyadmin/config.inc.php
Rob L.
źródło

Odpowiedzi:

31

Stąd: https://stackoverflow.com/a/4031502/804713

macports i homebrew dostarczają pakiet coreutils zawierający greadlink (readlink GNU). Podziękowania dla posta Michaela Kallweitta na mackb.com

napar zainstalować coreutils

greadlink -f plik.txt

Stephenbez
źródło
1
To doprowadzało mnie do szału. Zastanawiałem się, dlaczego -fnie miałbym pracować na non-GNU i jak to zrobić. To działa. Dzięki
sdkks,
1
Pamiętaj, że działa to również w przypadku katalogów
Paul Razvan Berg
20

Można to zrobić na wiele sposobów; Oto jeden przykład, który może Ci pomóc:

claw:~ jonv$ echo `pwd`/`ls config.in.php`
/Users/jonv/config.in.php

Jeśli chcesz więcej przykładów, istnieje kilka na tym stanowisku na stackoverflow.

yoonix
źródło
1
Jednak większość dobrych odpowiedzi na stronie stackoverflow.com/questions/5265702/… nie działa od razu w systemie OS X.
Quentin Pradet,
9

W Mac OSX wykonaj następujące czynności:

  1. cd do katalogu pliku docelowego.
  2. Wpisz dowolne z następujących poleceń terminalu.
Terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Zastąp file.txtrzeczywistą nazwą pliku.
  2. Prasa Enter.
Kosiarka
źródło
2

Możesz także użyć polecenia „znajdź”, aby wyświetlić listę wszystkich plików z pełną ścieżką:

find DirectoryName -type f

lub po prostu następujące:

find . -type f
Mireia
źródło
1
To nie zwraca absolutnej ścieżki (która wydaje się być tym, czego szukał OP)
Ogłoszenie N
2

Nie podobało mi się żadne z podanych rozwiązań, więc stworzyłem własne na podstawie https://stackoverflow.com/a/22684652/953327

Utwórz alias, który jest po prostu wywołaniem funkcji, która łączy pwdi ls $1. Możesz następnie dodać to do swojego, .bash_profilejeśli chcesz.

alias lsf='function _lsf(){ echo "$(pwd)/$(ls $1)"; };_lsf'

Przykład zastosowania:

lsf registry.lock
-> /tmp/registry.lock

Wybrałem opcję lsf„pełna lista” lub „plik listy”, ma to dla mnie sens, ale mogę je modyfikować.


Aktualizacja (Thanks @ santiago-arizti) Aby móc używać tego z względnymi ścieżkami (np. lsf ../../readme.md)

alias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
FGreg
źródło
Musiałem zadzwonić, podoba mi się to, lsf ../../readme.mdwięc nieco alias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
zmieniłem
mam nadzieję, że nie masz nic przeciwko, dodałem własną odpowiedź, ale ze skryptem w katalogu $ PATH zamiast aliasu
santiago arizti
2

Chciałem więcej, niż potrzebujesz, musiałem też móc zapytać o pliki w katalogu względnym ../../readme.md, a wynik powinien być podobny do/Users/santi/readme.md

Tak więc utworzyłem skrypt (wykonywalny) w folderze będącym częścią $PATHwywołanego pliku lsfo następującej treści:

#!/bin/bash
F=${1:?'usage lsf ../../readme.md'}
( cd $(dirname "$F") && echo $(pwd)/$(basename "$F") )

Możesz więc użyć go w następujący sposób:

santi@santis-mac:~/p/dir1/dir2$ lsf ../../readme.md 
/Users/santi/p/readme.md

Żadne parametry nie ostrzegają

santi@santis-mac:~/p/dir1/dir2$ lsf
/Users/santi/bin/lsf: line 3: 1: usage lsf ../../readme.md

Fałszywy katalog wyświetla ostrzeżenie (z powodu dirname)

santi@santis-mac:~/p/dir1/dir2$ lsf ../../fakedir/readme.md
/Users/santi/bin/lsf: line 5: cd: ../../fakedir: No such file or directory

Fałszywy plik, ale prawdziwy katalog nie ostrzega (w razie potrzeby możesz dodać weryfikację)

santi@santis-mac:~/p/dir1/dir2$ lsf ../../fakefile.md 
/Users/santi/p/fakefile.md
santiago arizti
źródło
1

Poniżej znajdzie plik w katalogu roboczym, który pasuje file.txti zwróci jego bezwzględną ścieżkę

find `pwd` -name file.txt
znak
źródło
Doskonały. 654321
Jan Kyu Peblik
1

Posługiwać się realpath

Na przykład:

$ realpath README.md 
/Users/joe/my/long/directory/structure/README.md

Odpowiedzi tutaj na stackoverflow: https://stackoverflow.com/a/3915075/441960

FYI, moja wersja MacOS (OSX):

$ uname -a
Darwin my-machine 18.7.0 Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64 x86_64
Purplejacket
źródło