Ottieni il percorso assoluto dei file usando il comando 'trova'


26

C'è un modo per ottenere il percorso assoluto di un file che si sta cercando?

Per esempio:

find .. -name "filename"

Mi dà risultati simili ../filenamema voglio il percorso completo.

Ciò di cui ho bisogno è trovare nella directory padre e nei suoi figli, per un file specifico, che userò in un altro script in seguito.

Grazie


Risposte:


15

Prova qualcosa del tipo:

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

Grazie, stavo solo testando $(cd ..; pwd). Qui funziona bene, ma se lo faccio da solo in un terminale, non riesco a ottenere la directory principale ... Ottengo "Bash: <dir>: è una directory. E se lo faccio $(cd ..; echo "something")ottengo" qualcosa: non un comando "
JorgeeFG

Intendi come un comando separato? Quindi dovresti lasciare fuori il simbolo del dollaro:(cd ..; pwd)
Scrutinizer

Grazie. Qualche riferimento sul perché dovrei rimuovere $, in che modo influisce sulla subshell?
JorgeeFG

1
( ... )significa eseguire in una subshell, l'output viene scritto su stdout. $( ... )sta per "sostituzione comando". Quest'ultimo può essere usato come se fosse un'espansione variabile.
Scrutinizer

find / -name "filename"
Panther

12

Prova a usare l' -execopzione di find:

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

Nota: readlinkstampa il valore di un collegamento simbolico o del nome file canonico.


questo chiamerà readlink su ogni file quindi sarà molto inefficace.
bac0n

9

Puoi usare bashTilde Expansion per ottenere il percorso assoluto della directory di lavoro corrente, in questo modo findstampa anche il percorso assoluto per i risultati:

find ~+ -type f -name "filename"

Se eseguito in ~/Desktop, questo viene espanso in

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

e stampa risultati come:

/home/yourusername/Desktop/filename

Se si desidera utilizzare questo approccio con la directory principale della directory di lavoro corrente, è necessario cdprima di chiamare find:

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


1

Anche l'uso di PWD può mostrarti la directory completa. Pwd ti mostrerà tutte le tue directory in cui ti trovi come l'espansione del nome file. Spero che questo abbia aiutato.


1

Questo ha funzionato per me, ma restituirà solo la prima occorrenza.

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

Per ottenere percorsi completi per tutte le occorrenze (come suggerito da Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Commento precedente rimosso, +1, buon lavoro @Wyrmwood
Sergiy Kolodyazhnyy

1

Rimozione dell'ultimo componente della directory con il parametro Expansion .

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

Un esempio di come è possibile utilizzare mapfile per salvare l'output da find in un array indicizzato per un uso successivo.

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

(se non viene specificato alcun nome di array, MAPFILE sarà il nome di array predefinito).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.