Как показать полный путь к файлу, включая полное имя файла в терминале Mac OSX?


40

'ls' может показывать имя файла, например

ls config.inc.php
config.inc.php 

'pwd' показывает полный путь к текущей папке, например

pwd
/Application/XAMPP/xamppfiles/phpmyadmin

Есть ли команда, которая может собрать их вместе, сможет показать:

/Application/XAMPP/xamppfiles/phpmyadmin/config.inc.php

Ответы:


31

Отсюда: https://stackoverflow.com/a/4031502/804713

macports и homebrew предоставляют пакет coreutils, содержащий greadlink (GNU readlink). кредит Майкла Калвейтта пост в mackb.com

brew установить coreutils

greadlink -f file.txt


1
Это сводило меня с ума. Я думал, почему -fбы не работать на не-GNU и как заставить его работать. Это работает. Спасибо
sdkks

1
Обратите внимание, что это также работает для каталогов
Пол Разван Берг

20

Есть много способов сделать это; Вот один пример, который может работать на вас:

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

Если вы хотите больше примеров, в этом посте есть куча в stackoverflow.


1
Большинство хороших ответов на stackoverflow.com/questions/5265702/… не работают из коробки на OS X, однако.
Квентин Праде

9

В Mac OSX выполните следующие действия:

  1. cd в каталог целевого файла.
  2. Введите одну из следующих команд терминала.
Терминал
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Замените file.txtна ваше фактическое имя файла.
  2. Нажмите Enter.

2

Вы также можете использовать команду «find» для вывода списка всех файлов с полным путем:

find DirectoryName -type f

или просто следующее:

find . -type f

1
Это не возвращает абсолютный путь (который, кажется, был тем, что искал OP)
Объявление N

2

Не понравилось ни одно из приведенных решений, поэтому я создал свой собственный на основе https://stackoverflow.com/a/22684652/953327

Создайте псевдоним, который просто является вызовом функции, который объединяет pwdи ls $1. Затем вы можете добавить это к вашему, .bash_profileесли вы выберете.

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

Пример использования:

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

Я выбрал lsfдля «полный список» или «список файлов», имеет смысл для меня, но не стесняйтесь изменять.


Обновление (спасибо @ santiago-arizti), чтобы иметь возможность использовать это с относительными путями (например lsf ../../readme.md)

alias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'

Мне нужно было позвонить, мне это нравится, lsf ../../readme.mdпоэтому я немного изменил вашу версиюalias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
Сантьяго Аристи

надеюсь, вы не возражаете, я добавил свой собственный ответ, но со сценарием в директории $ PATH вместо псевдонима
santiago arizti

2

Я хотел больше, чем вам нужно, мне нужно было также иметь возможность спрашивать о файлах в относительном каталоге, например ../../readme.md, и результат должен быть что-то вроде/Users/santi/readme.md

Поэтому я создал (исполняемый) скрипт в папке, которая является частью $PATHвызываемого lsfсо следующим содержимым:

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

Так что вы можете использовать это так:

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

Никакие параметры не дают вам предупреждение

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

Поддельный каталог выдает предупреждение (из-за dirname)

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

Поддельный файл, но реальный каталог не предупреждает (вы можете добавить проверку, если вам нужно)

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

1

Следующее найдет файл в рабочем каталоге, который соответствует file.txtи вернет его абсолютный путь

find `pwd` -name file.txt

Отлично. 654321
Ян Кью Пеблик

1

использование realpath

Например:

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

Ответ здесь на stackoverflow: https://stackoverflow.com/a/3915075/441960

К вашему сведению, моя версия 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.