Mac OSX terminalinde tam dosya adını içeren bir dosyanın tam yolunu nasıl gösterebilirim?


40

'ls' dosya adını gösterebilir, örn.

ls config.inc.php
config.inc.php 

'pwd' mevcut klasörün tam yolunu gösterir, örneğin

pwd
/Application/XAMPP/xamppfiles/phpmyadmin

Onları bir araya getirebilecek bir komut var mı, gösterebilirdi:

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

Yanıtlar:


31

Buradan: https://stackoverflow.com/a/4031502/804713

macports ve homebrew, greadlink (GNU readlink) içeren bir coreutils paketi sunar. mackb.com'da Michael Kallweitt'e kredi notu

demlemek coreutils yüklemek

greadlink -f file.txt


1
Bu beni deli ediyordu. Neden -fGNU olmayanlar üzerinde çalışmayacağını ve nasıl çalışacağını düşünüyordum. Bu çalışıyor. Teşekkürler
sdkks 13:17

1
Bunun rehberler için de işe yaradığını unutmayın
Paul Razvan Berg

20

Bunu yapmanın birçok yolu var; İşte sizin için işe yarayabilecek bir örnek:

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

Daha fazla örnek istiyorsanız, bu yazıda stackoverflow'ta bir demet var .


1
Ancak stackoverflow.com/questions/5265702/… adresindeki en iyi yanıtlar OS X üzerindeki kutunun dışında kalmaz.
Quentin Pradet

9

Mac OSX'te aşağıdaki adımları izleyin:

  1. cd hedef dosyanın dizinine.
  2. Aşağıdaki terminal komutlarından birini yazın.
terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. değiştirmek file.txtGerçek dosya adınızla .
  2. Tuşuna basın Enter.

2

Tüm dosyaları tam yol ile listelemek için "find" komutunu da kullanabilirsiniz:

find DirectoryName -type f

veya sadece aşağıdakileri:

find . -type f

1
Bu (OP'nin aradığı gibi görünüyor) mutlak yolu geri getirmiyor
Ad N

2

Verilen çözümlerden hiçbirini beğenmediğim için https://stackoverflow.com/a/22684652/953327

Sadece pwdve birleştiren bir işlev çağrısı olan diğer ad oluşturun ls $1. İsterseniz bunu kendinize ekleyebilirsiniz .bash_profile.

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

Kullanım örneği:

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

lsf"Liste dolu" veya "liste dosyası" için seçtim , bana mantıklı geliyor ama değiştirmekte özgürsünüz.


Güncelle (Thanks @ santiago-arizti) Bunu göreceli yollarla kullanabilmek için (örn. lsf ../../readme.md)

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

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

umarım sakıncası yok, kendi cevabımı ekledim ama aliase yerine $ PATH dizininde bir senaryo ekledim
santiago arizti

2

İhtiyacınız olandan daha fazlasını istedim, göreceli bir dizindeki dosyaları da sorabiliyordum. ../../readme.md sorabilmem gerekiyordu ve sonuç şöyle bir şey olmalı/Users/santi/readme.md

Böylece $PATHçağrılanın bir parçası olan bir klasörde (çalıştırılabilir) bir komut dosyası oluşturdum lsf:

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

Yani bu şekilde kullanabilirsiniz:

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

Hiçbir parametre size uyarı vermez

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

Sahte dizin size uyarı verir (çünkü dirname)

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

Sahte dosya ancak gerçek dizin uyarılmaz (gerekirse doğrulama ekleyebilirsiniz)

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

1

Aşağıdakiler, çalışma dizini içinde file.txtmutlak yoluna uyan ve dönen bir dosya bulacaktır.

find `pwd` -name file.txt

Mükemmel. 654321
Jan Kyu Peblik

1

kullanım realpath

Örneğin:

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

Burada stackoverflow'ta cevaplandı: https://stackoverflow.com/a/3915075/441960

FYI, MacOS versiyonum (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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.