Як показати повний шлях до файлу, включаючи повне ім'я файлу в терміналі 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 (readnlink GNU). заслуга Майкла Калвейта в публікації на mackb.com

варити встановити 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 DirectoryName -type f

або просто наступне:

find . -type f

1
Це не повертає абсолютного шляху (який, здається, те, що шукав ОП)
Ad 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

FYI, моя версія 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.