Como mostrar o caminho completo de um arquivo, incluindo o nome completo do arquivo no terminal Mac OSX?


40

'ls' pode mostrar o nome do arquivo, por exemplo

ls config.inc.php
config.inc.php 

'pwd' mostra o caminho completo da pasta atual, por exemplo

pwd
/Application/XAMPP/xamppfiles/phpmyadmin

Existe um comando pode colocá-los juntos, seria capaz de mostrar:

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

Respostas:


31

A partir daqui: https://stackoverflow.com/a/4031502/804713

macports e homebrew fornecem um pacote coreutils contendo greadlink (GNU readlink). crédito para Michael Kallweitt post no mackb.com

brew install coreutils

greadlink -f file.txt


1
Isso estava me deixando louco. Eu estava pensando por -fque não funcionaria em não-GNU e como fazê-lo funcionar. Isso funciona. Graças
sdkks

1
Observe que isso também funciona para diretórios
Paul Razvan Berg

20

Há muitas maneiras de fazer isso; Aqui está um exemplo que pode funcionar para você:

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

Se você quiser mais exemplos, há um monte nesta postagem no stackoverflow.


1
No entanto, a maioria das boas respostas em stackoverflow.com/questions/5265702/… não funciona imediatamente no OS X.
Quentin Pradet

9

No Mac OSX, execute as seguintes etapas:

  1. cd no diretório do arquivo de destino.
  2. Digite um dos seguintes comandos do terminal.
terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Substitua file.txtpelo seu nome de arquivo real.
  2. Pressione Enter.

2

Você também pode usar o comando "find" para listar todos os arquivos com o caminho completo:

find DirectoryName -type f

ou apenas o seguinte:

find . -type f

1
Esta não retorna o caminho absoluto (o que parece ser o que OP estava procurando)
Anúncio N

2

Não gostei de nenhuma das soluções fornecidas, então criei as minhas com base em https://stackoverflow.com/a/22684652/953327

Crie um alias que simplesmente é uma chamada de função que combina pwde ls $1. Você pode adicionar isso ao seu, .bash_profilese quiser.

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

Exemplo de uso:

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

Eu escolhi lsfpara "lista cheia" ou "arquivo de lista", faz sentido para mim, mas sinta-se à vontade para modificar.


Atualização (Obrigado @ santiago-arizti) Para poder usar isso com caminhos relativos (por exemplo lsf ../../readme.md)

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

Eu precisava ligar assim, lsf ../../readme.mdentão alterei um pouco a sua versãoalias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
santiago arizti

espero que você não se importe, eu adicionei minha própria resposta, mas com um script em um diretório $ PATH em vez de um aliase
santiago arizti

2

Eu queria mais do que você precisava, também precisava poder perguntar sobre arquivos em um diretório relativo, como ../../readme.md, e o resultado deve ser algo como/Users/santi/readme.md

Então, criei um script (executável) em uma pasta que faz parte da $PATHchamada lsfcom o seguinte conteúdo:

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

Então você pode usá-lo assim:

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

Nenhum parâmetro avisa

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

Diretório falso fornece aviso (por causa de dirname)

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

Arquivo falso, mas o diretório real não avisa (você pode adicionar a validação se precisar)

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

1

A seguir, você encontrará um arquivo no diretório de trabalho que corresponda file.txte retornará seu caminho absoluto

find `pwd` -name file.txt

Perfeito. 654321
Jan Kyu Peblik 5/11

1

Usar realpath

Por exemplo:

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

Respondida aqui no stackoverflow: https://stackoverflow.com/a/3915075/441960

Para sua informação, minha versão do 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.