Obtenga la ruta absoluta de los archivos con el comando 'buscar'


26

¿Hay alguna manera de obtener la ruta absoluta de un archivo que se está buscando?

Por ejemplo:

find .. -name "filename"

Me da resultados como ../filenamepero quiero el camino completo.

Lo que necesito es encontrar en el directorio principal y sus hijos, para un archivo específico, que utilizaré en otro script más adelante.

Gracias


Respuestas:


15

Intenta algo como:

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

Gracias, solo estaba probando $(cd ..; pwd). Aquí funciona bien, pero si lo hago solo en una Terminal, no puedo obtener el directorio principal ... Obtengo "Bash: <dir>: es un directorio. Y si lo hago $(cd ..; echo "something"), obtengo" algo: no un comando "
JorgeeFG

¿Te refieres a un comando separado? Entonces, deberías dejar de lado el signo del dólar:(cd ..; pwd)
Scrutinizer

Gracias, eso fue todo. Cualquier referencia de por qué debería eliminar $, ¿cómo afecta a la subshell?
JorgeeFG

1
( ... )significa ejecutar en una subshell, la salida se escribe en stdout. $( ... )significa "sustitución de comando". Este último puede usarse como si fuera una expansión variable.
Scrutinizer

find / -name "filename"
Panther

12

Intenta usar la -execopción de find:

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

Nota: readlinkimprime el valor de un enlace simbólico o un nombre de archivo canónico.


Esto llamará a readlink en cada archivo, por lo que será muy ineficaz.
Bac0n

9

Puede usar bashla expansión de Tilde para obtener la ruta absoluta del directorio de trabajo actual, de esta manera también se findimprime la ruta absoluta para los resultados:

find ~+ -type f -name "filename"

Si se ejecuta en ~/Desktop, esto se expande a

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

e imprime resultados como:

/home/yourusername/Desktop/filename

Si desea utilizar este enfoque con el directorio principal del directorio de trabajo actual , debe hacerlo cdantes de llamar find:

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


1

También usar PWD puede mostrarle el directorio completo. Pwd le mostrará a todos sus directores en los que se encuentra, como la expansión del nombre de archivo. Espero que esto haya ayudado.


1

Esto funcionó para mí, pero solo devolverá la primera vez.

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

Para obtener rutas completas para todas las ocurrencias (como lo sugiere Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Comentario anterior eliminado, +1, buen trabajo @Wyrmwood
Sergiy Kolodyazhnyy

1

Eliminando el último componente del directorio con el parámetro Expansión .

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

Un ejemplo de cómo puede usar mapfile para guardar la salida de find en una matriz indexada para su uso posterior.

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

(si no se especifica ningún nombre de matriz, MAPFILE será el nombre de matriz predeterminado).

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