Mi objetivo es encontrar todos los archivos pdf en una máquina remota, así que recurro al comando útil find
. Entonces escribo
encontrar ~ * .pdfo
encontrar ~ "* .pdf"Y no consigo nada. Hago lo mismo en mi máquina y no obtengo nada. Hago una búsqueda regular desde el menú de mi máquina y encuentro bastantes archivos pdf. ¿Podría alguien decirme qué estoy haciendo mal?
find
está lejos de ser inútil.find
es intuitivo. Sin embargo, probablemente podría decir lo mismo en un tono más agradable; a veces reacciono a comentarios negativos (tontos).Respuestas:
find
Está lejos de ser inútil. Simplemente no lo estás usando correctamente.tratar:
find . -type f -iname '*.pdf'
fuente
Eche un vistazo a la documentación de findutils . El
find
comando es increíblemente poderoso y, en consecuencia, tiene una interfaz algo complicada. Puedes hacer lo que quieras con:El comando anterior significa "buscar dentro. Para entradas de archivo de tipo con un nombre que no distinga entre mayúsculas y minúsculas * .pdf (e imprima el nombre de tales coincidencias)". El comando find se puede usar para ejecutar comandos en los archivos que se encuentran (en lugar de o además de imprimir los nombres de los archivos). Sin embargo, para sus propósitos, es posible que se sienta más cómodo con el comando de localización , que, suponiendo que haya creado la base de datos de localización utilizando updatedb , hace que sea muy fácil encontrar archivos. Por ejemplo:
También encontrará que el comando de localización suele ser más rápido que el comando de búsqueda, ya que la localización utiliza un índice de nombres de archivo (la base de datos de localización), mientras que la búsqueda recorrerá la jerarquía para cada invocación.
fuente
Simplemente te estás perdiendo el predicado que dice lo que estás buscando (p
-name
. Ej .)Para buscar en el directorio de inicio por nombre:
Tenga en cuenta que el comodín
*
debe escaparse para que el shell no lo interprete antes de que find lo tenga en sus manos. Usando'*.pdf'
y"*.pdf"
tendrá el mismo efecto que\*.pdf
.Para encontrar mayúsculas y minúsculas:
Para podar los resultados solo en archivos (la expresión de nombre probablemente se encargará de esto por usted, pero en caso de que tenga directorios con nombres extraños):
Para asegurarse de que find sigue enlaces simbólicos (generalmente quiero hacer esto yo mismo cuando hago búsquedas):
Para hacer algo con los archivos que encontró: puede volcar esto en un archivo utilizando la redirección stdout (por ejemplo, agregar
> filename
al final), o usar la-exec
opción para ejecutar un comando (consulte la página del manual para más detalles). Sin embargo, este último ejecuta un comando en cada archivo a la vez. a menudo es más rápido dejar que elxargs
comando pase sus archivos encontrados como argumentos a otro comando, todo a la vez o grandes fragmentos a la vez. Por ejemplo, para greps ad-hoc (pero no indexados) a través de archivos de encabezado:Y una extensión final, para que ese último comando funcione correctamente si tiene archivos y directorios con espacios en ellos:
fuente
echa un vistazo a este tutorial
creo que lo que quieres hacer es
fuente
iname
atributo para una mejor visión del pasilloSolía combinar el hallazgo con grep like
encontrar . . El | grep -i ".pdf"
tal vez no sea eficiente, pero hace el trabajo bien.
fuente
find
directo si hubiese deseado, a través de-iregex
:find ~ -iregex '.*\.pdf'
. El problema es que enfind
el patrón se trata como si siempre tuviera una^
en la parte delantera y una$
en la parte posterior, por lo que su patrón debe ser un poco más complicado. También tenga.
en cuenta: que en su patrón hay un comodín de un solo carácter, no un punto literal.Encuentra los archivos que necesitas descargar en los últimos x días
encontrará sus archivos pdf en su
~
directorio de inicio y debajo con extensión,.pdf
independientemente de las mayúsculas y minúsculas (eso es iiname
) y modificado hasta hace 1 día porque he agregadomtime -1
; si pones -60 en mtime serán los últimos 60 días.fuente
Para ejecutar una búsqueda dentro de los archivos "encontrados" existe esta construcción:
El comando exec debe terminar con el ";" escapado y -H es necesario para que grep imprima la ruta del archivo además de la línea dentro del archivo donde está "string".
fuente