วิธีแสดงพา ธ แบบเต็มของไฟล์รวมถึงชื่อไฟล์แบบเต็มในเทอร์มินัล 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) เครดิตไปที่ Michael Kallweitt โพสต์ใน mackb.com

ชงติดตั้ง coreutils

greadlink -f file.txt


1
นี่คือการขับรถฉันถั่ว ฉันคิดว่าทำไม-fไม่ทำงานกับผู้ที่ไม่ใช่ GNU และทำอย่างไรถึงจะทำงานได้ วิธีนี้ใช้ได้ผล ขอบคุณ
sdkks

1
โปรดทราบว่าวิธีนี้ใช้ได้กับไดเรกทอรีด้วยเช่นกัน
Paul Razvan Berg

20

มีหลายวิธีที่จะทำเช่นนั้น; นี่คือตัวอย่างหนึ่งที่อาจเหมาะกับคุณ:

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

หากคุณต้องการตัวอย่างเพิ่มเติมมีกลุ่มของโพสต์นี้ที่ stackoverflow


1
อย่างไรก็ตามคำตอบที่ดีที่สุดในstackoverflow.com/questions/5265702/ …ไม่ทำงานนอกกรอบใน OS X
Quentin Pradet

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
สิ่งนี้ไม่ส่งคืนเส้นทางสัมบูรณ์ (ซึ่งน่าจะเป็นสิ่งที่ 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'
santiago arizti

หวังว่าคุณจะไม่รังเกียจฉันได้เพิ่มคำตอบของฉันเอง แต่ด้วยสคริปต์ใน $ PATH dir แทนที่จะเป็น aliase
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

ใช้ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.