Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia |
linux:bash:find [19/09/2019 08:33] – [ejemplos] mate | linux:bash:find [02/09/2024 02:10] (actual) – [tiempo] mate |
---|
| |
== ejemplos | == ejemplos |
| === básicos |
* buscar ficheros que empiecen por cadena y algo más: ''find . -name cadena\*'' | * buscar ficheros que empiecen por cadena y algo más: ''find . -name cadena\*'' |
* buscar todos los fichero excepto los que sean en minúsculas: ''find . -iname cadena\* -not -name cadena\*'' | * buscar todos los fichero excepto los que sean en minúsculas: ''find . -iname cadena\* -not -name cadena\*'' |
* borrar ficheros siguiendo un criterio: ''find -iname \*.mp3 -exec rm {} \;'' | * borrar ficheros siguiendo un criterio: ''find -iname \*.mp3 -exec rm {} \;'' |
* ejecutar programa en ficheros encontrados: ''find -iname "MyCProgram.c" -exec md5sum {} \;'' | * ejecutar programa en ficheros encontrados: ''find -iname "MyCProgram.c" -exec md5sum {} \;'' |
* buscar un fichero modificado el día de hoy: ''find . -daystart -mtime 0'' | |
* ''$ find . -daystart -mtime 1'' : ayer | |
* mostrar los ficheros que contienen una cadena: '' find . -exec grep -l "cadena" {} \;'' | * mostrar los ficheros que contienen una cadena: '' find . -exec grep -l "cadena" {} \;'' |
* hacer copias de seguridad de ciertos ficheros: ''find -name "*.txt" cp {} {}.bkup \;'' | * hacer copias de seguridad de ciertos ficheros: ''find -name "*.txt" cp {} {}.bkup \;'' |
* ''find . -type f -regex '.*\.\(jpg\|docx\)' | xargs cp -t /path/destino'' | * ''find . -type f -regex '.*\.\(jpg\|docx\)' | xargs cp -t /path/destino'' |
* cuenta directorios: ''find <PATH> -maxdepth 1 -type d -printf '.' | wc -c'' | * cuenta directorios: ''find <PATH> -maxdepth 1 -type d -printf '.' | wc -c'' |
| * Borrar recursivamente directorios vacios: ''find . -type d -empty -delete'' |
== ejemplos curiosos | * Borrar recursivamente directorios vacios: ''find . -type d -empty -print0 | xargs -0 rmdir'' |
* Borrar recursivamente directorios vacios: ''$ find . -type d -empty -delete'' | |
* Borrar recursivamente directorios vacios: ''$ find . -type d -empty -print0 | xargs -0 rmdir'' | |
* Borrar fichero por inodo: ''ls -li; find . -inum <número inodo> | xargs rm'' | * Borrar fichero por inodo: ''ls -li; find . -inum <número inodo> | xargs rm'' |
* Buscar una cadena en una serie de ficheros: ''$ find . -name "*.java" -print0 | xargs -0 grep -i ".*Legacy.*xmi"'' | * Buscar una cadena en una serie de ficheros: ''find . -name "*.java" -print0 | xargs -0 grep -i ".*Legacy.*xmi"'' |
* buscar en el directorio <dir> la cadena <cadena>: ''$ find <dir> -name "<cadena>"'' | * buscar en el directorio <dir> la cadena <cadena>: ''find <dir> -name "<cadena>"'' |
* buscar ficheros más recientes que otro de referencia: ''$ find . -name '*.java' -newer build.xml -print'' | * borrar ficheros que cumplan un requisito: ''find . -type f -name '*.class' -exec rm -vf {} \;'' |
* borrar ficheros que cumplan un requisito: ''$ find . -type f -name '*.class' -exec rm -vf {} \;'' | * buscar archivos a partir de un determinado tamaño: ''find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -nrk 2,2'' |
* borrar ficheros de más de 30 días: ''$ find /path/ -type f -mtime +30 -exec rm -f {} \;'' | * localizar archivos del tipo imagen o video y borrarlos: ''find . -type f -exec file {} \; | awk -F: ‘{if ($2 ~/image|video/) print $1 }’ | xargs rm -f'' |
* localizar ficheros de menos de 30 días: ''$ find . -type f -mtime -30'' | |
* buscar archivos a partir de un determinado tamaño: ''$ find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -nrk 2,2'' | === tiempo |
* buscar solo en archivos "ocultos" (en este caso 15 minutos atrás): ''$ find . -mmin -15 \( ! -regex ".*/\..*" \)'' | * buscar un fichero modificado hoy/ayer: |
* buscar ficheros más recientes que otro fichero de referencia: ''$ find . -type f -newer <fichero-referencia>'' | * hoy: ''find . -daystart -mtime 0'' |
* si queremos que sean anteriores al fichero de referencia: ''$ find . -type f ! -newer <fichero-referencia>'' | * ayer: ''$ find . -daystart -mtime 1'' |
* localizar archivos del tipo imagen o video y borrarlos: ''$ find . -type f -exec file {} \; | awk -F: ‘{if ($2 ~/image|video/) print $1 }’ | xargs rm -f'' | * buscar ficheros más recientes que otro de referencia: ''find . -name '*.java' -newer build.xml -print'' |
| * borrar ficheros de más de 30 días: ''find /path/ -type f -mtime +30 -exec rm -f {} \;'' |
| * <code bash>find ${BACKUP_PATH} -daystart -type f -mtime +31 -not -name "*01.sql.tgz" -not -name "*01.sql.gz" -not -name "enchive.*" -exec echo rm {} \; |
| find ${BACKUP_PATH} -daystart -type f -mtime +31 -not -name "*01.sql.tgz" -not -name "*01.sql.gz" -not -name "enchive.*" -delete</code> |
| * localizar ficheros de menos de 30 días: ''find . -type f -mtime -30'' |
| * localizar ficheros entre dos fechas: ''find -type f -name "*.dcm" -newermt 2016-04-08 ! -newermt 2016-04-09'' |
| * buscar ficheros más recientes que otro fichero de referencia: ''find . -type f -newer <fichero-referencia>'' |
| * si queremos que sean anteriores al fichero de referencia: ''find . -type f ! -newer <fichero-referencia>'' |
| * buscar solo en archivos "ocultos" (en este caso 15 minutos atrás): ''find . -mmin -15 \( ! -regex %%".*/\..*"%% \)'' |
| * buscar entre últimos días excluyendo un patrón por nombre (por refinar):''find . -type f -mtime +7 -not -regex ".*/[2][0-9][0-1][0-9][0-1][1,6].*"'' |
| * la idea es que excluya los XXXX01 y XXXX16, esto actualmente hace match en 01,06,11,16 |
| * [[https://newbedev.com/how-to-use-regex-with-find-command]] |
| * [[https://unix.stackexchange.com/questions/70933/regular-expression-for-finding-double-characters-in-bash]] |
| * [[https://stackoverflow.com/questions/6844785/how-to-use-regex-with-find-command]] |
| * [[https://regex101.com/]] |
| * [[https://towardsdatascience.com/regular-expressions-clearly-explained-with-examples-822d76b037b4]] |
| |
| === scripting |
* ejecutar varias instrucciones sobre los items localizados:<code bash>find ... | while read -r file; do | * ejecutar varias instrucciones sobre los items localizados:<code bash>find ... | while read -r file; do |
echo "look at my $file, my $file is amazing"; | echo "look at my $file, my $file is amazing"; |
done</code> | done</code> |
| * preservar 1 mes de logs, guardar 1 de los anteriores:<code bash>#!/bin/bash |
| PRESERVE=$(/bin/date +'%Y-%m-01' -d '-1 month') |
| find . -daystart -type f -mtime +31 -not -mtime +60 -name "*.log" -not -name "*${PRESERVE}*" -exec rm {} \; |
| </code> |