Obtenha o caminho absoluto dos arquivos usando o comando 'find'


26

Existe uma maneira de obter o caminho absoluto de um arquivo que está sendo pesquisado?

Por exemplo:

find .. -name "filename"

Dá-me resultados como, ../filenamemas eu quero o caminho completo.

O que preciso é encontrar no diretório pai e seus filhos, para um arquivo específico, que usarei em outro script posteriormente.

obrigado


Respostas:


15

Tente algo como:

find "$(cd ..; pwd)" -name "filename"

Obrigado, eu estava apenas testando $(cd ..; pwd). Aqui funciona bem, mas se eu fizer sozinho em um terminal, não consigo obter o diretório pai ... recebo "Bash: <dir>: é um diretório. E se $(cd ..; echo "something")eu receber" algo: não um command "
JorgeeFG

Você quer dizer como um comando separado? Em seguida, você precisa deixar de fora o sinal de dólar:(cd ..; pwd)
Scrutinizer

Obrigado, foi isso. Qualquer referência de por que devo remover o $, como isso afeta o subshell?
JorgeeFG

1
Sim ( ... )significa executar em um subshell, a saída é gravada em stdout. $( ... )significa "substituição de comando". O último pode ser usado como se fosse uma expansão variável.
Scrutinizer

find / -name "filename"
Panther

12

Tente usar a -execopção de find:

find .. -name "filename" -exec readlink -f {} \;

Nota: readlinkimprime o valor de um link simbólico ou de um nome de arquivo canônico.


isso chamará readlink em todos os arquivos, por isso será muito ineficaz.
bac0n 16/10

9

Você pode usar basho Tilde Expansion para obter o caminho absoluto do diretório de trabalho atual, assim também findimprime o caminho absoluto para os resultados:

find ~+ -type f -name "filename"

Se executado ~/Desktop, isso é expandido para

find /home/yourusername/Desktop -type f -name "filename"

e imprime resultados como:

/home/yourusername/Desktop/filename

Se você quiser usar essa abordagem com o diretório pai do diretório de trabalho atual, precisará cdantes de chamar find:

cd .. && find ~+ -type f -name "filename"


1

O uso do PWD também pode mostrar o diretório completo. O Pwd mostrará todas as diretivas em que você está, como a expansão do nome do arquivo. Espero que isso tenha ajudado.


1

Isso funcionou para mim, mas retornará apenas a primeira ocorrência.

realpath $(find . -type f -name filename -print -quit)

Para obter caminhos completos para todas as ocorrências (como sugerido por Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Comentário anterior removido, +1, bom trabalho @Wyrmwood
Sergiy Kolodyazhnyy 16/10

1

Removendo o último componente do diretório com o parâmetro Expansion .

find "${PWD%/*}" -name 'filename'

Um exemplo de como você pode usar o mapfile para salvar a saída da localização em uma matriz indexada para uso posterior.

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(se nenhum nome de matriz for especificado, MAPFILE será o nome da matriz padrão).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
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.