¿Cómo mostrar la ruta completa de un archivo que incluye el nombre de archivo completo en el terminal Mac OSX?


40

'ls' puede mostrar el nombre del archivo, p. ej.

ls config.inc.php
config.inc.php 

'pwd' muestra la ruta completa de la carpeta actual, p. ej.

pwd
/Application/XAMPP/xamppfiles/phpmyadmin

¿Hay un comando que pueda juntarlos? Podría mostrar:

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

Respuestas:


31

Desde aquí: https://stackoverflow.com/a/4031502/804713

macports y homebrew proporcionan un paquete coreutils que contiene greadlink (GNU readlink). crédito a Michael Kallweitt publicar en mackb.com

instalar brew coreutils

greadlink -f archivo.txt


1
Esto me estaba volviendo loco. Estaba pensando por -fqué no funcionaría en un sistema que no sea GNU y cómo hacerlo funcionar. Esto funciona. Gracias
sdkks

1
Tenga en cuenta que esto también funciona para directorios
Paul Razvan Berg

20

Hay muchas formas de hacer eso; Aquí hay un ejemplo que puede funcionar para usted:

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

Si quieres más ejemplos, hay muchos en esta publicación en stackoverflow.


1
Sin embargo, la mayoría de las buenas respuestas en stackoverflow.com/questions/5265702/… no funcionan de fábrica en OS X.
Quentin Pradet

9

En Mac OSX, realice los siguientes pasos:

  1. cd en el directorio del archivo de destino.
  2. Escriba cualquiera de los siguientes comandos de terminal.
Terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Reemplace file.txtcon su nombre de archivo real.
  2. Presione Enter.

2

También puede usar el comando "buscar" para enumerar todos los archivos con la ruta completa:

find DirectoryName -type f

o solo lo siguiente:

find . -type f

1
Esto no devuelve el camino absoluto (que parece ser lo que OP estaba buscando)
Anuncio N

2

No me gustó ninguna de las soluciones dadas, así que inventé la mía basada en https://stackoverflow.com/a/22684652/953327

Cree un alias que simplemente sea una llamada de función que combine pwdyls $1 . Luego puede agregar esto a su .bash_profilesi lo desea.

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

Ejemplo de uso:

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

elegí lsf "lista completa" o "archivo de lista", tiene sentido para mí, pero no dudes en modificarlo.


Actualización (Gracias @ santiago-arizti) Para poder usar esto con rutas relativas (por ejemplo lsf ../../readme.md)

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

Necesitaba llamarme así, lsf ../../readme.mdasí que alias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
alteré

Espero que no te importe, agregué mi propia respuesta, pero con un script en un directorio $ PATH en lugar de un alias
santiago arizti

2

Quería más de lo que necesitabas, necesitaba poder preguntar también sobre los archivos en un directorio relativo, como ../../readme.md, y el resultado debería ser algo como/Users/santi/readme.md

Entonces creé un script (ejecutable) en una carpeta que es parte de la $PATHllamada lsfcon los siguientes contenidos:

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

Entonces puedes usarlo así:

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

Ningún parámetro te avisa

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

Directorio falso le da advertencia (debido a dirname)

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

Archivo falso pero el directorio real no advierte (puede agregar validación si lo necesita)

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

1

Lo siguiente encontrará un archivo dentro del directorio de trabajo que coincida file.txty devolverá su ruta absoluta

find `pwd` -name file.txt

Perfecto. 654321
Jan Kyu Peblik

1

Utilizar realpath

P.ej:

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

Respondido aquí en stackoverflow: https://stackoverflow.com/a/3915075/441960

FYI, mi versión de 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.