linux:bash:find

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
linux:bash:find [11/04/2018 03:04] – [ejemplos] matelinux:bash:find [02/09/2024 02:10] (actual) – [tiempo] mate
Línia 48: Línia 48:
     * %u : nombre del usuario al que pertenece el fichero     * %u : nombre del usuario al que pertenece el fichero
   * -prune : convierte la expresión precedente en "no quiero esto"   * -prune : convierte la expresión precedente en "no quiero esto"
-  * -owner <user> : el fichero pertenece al usuario <user>+  * -user <user> : el fichero pertenece al usuario <user>
   * -nouser : el fichero tiene un propietario que no está en /etc/passwd   * -nouser : el fichero tiene un propietario que no está en /etc/passwd
   * -uid <uid>   * -uid <uid>
Línia 67: Línia 67:
  
 == ejemplos == ejemplos
-  * buscar ficheros que empiecen por cadena y algo más: ''find . -name cadena\*'' +=== básicos 
-  * buscar todos los fichero excepto los que sean en minúsculas: ''find . -iname cadena\* -not -name cadena\*'' +  * buscar ficheros que empiecen por cadena y algo más: ''find . -name cadena\*'' 
-  * buscar en directorios+carpetas, mostrar solo ficheros : ''find . -path \*cadena -type f'' +  * buscar todos los fichero excepto los que sean en minúsculas: ''find . -iname cadena\* -not -name cadena\*'' 
-  * buscar 2 juegos de ficheros diferentes, vuelca el resultado en ficheros: ''find . -type f \( -name \*.php -fprint php_files , -name \*.js -fprint js_files \)'' +  * buscar en directorios+carpetas, mostrar solo ficheros : ''find . -path \*cadena -type f'' 
-  * buscar unos ficheros excepto algunos: ''find \( -path <criterio_no_quiero#1> -o -path <criterio_no_quiero#2> \) -prune -o -path <criterio_quiero>'' +  * buscar 2 juegos de ficheros diferentes, vuelca el resultado en ficheros: ''find . -type f \( -name \*.php -fprint php_files , -name \*.js -fprint js_files \)'' 
-  * borrar ficheros siguiendo un criterio: ''find -iname \*.mp3 -exec rm {} \;''+  * buscar unos ficheros excepto algunos: ''find \( -path <criterio_no_quiero#1> -o -path <criterio_no_quiero#2> \) -prune -o -path <criterio_quiero>'' 
 +  * 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 -atime 1'' +  * 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 \;'' +  * renombrar ficheros: ''find -name "*.txt" -exec mv {} `basename {} .htm`.html \;'' 
-  * renombrar ficheros: ''find -name "*.txt" -exec mv {} `basename {} .htm`.html \;'' +  * cambiar espacios por subrayados: ''find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;'' 
-  * cambiar espacios por subrayados: ''find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;'' +  * buscar los 5 archivos más grandes: ''find . -type f -exec ls -s {} \; | sort -n -r | head -5'' 
-  * buscar los 5 archivos más grandes: ''find . -type f -exec ls -s {} \; | sort -n -r | head -5'' +  * copiar archivos de extensiones diferentes en una carpeta: 
-  * buscar ficheros de imagen o video y borrarlos: ''find . -type f -exec file {} \awk -F: ‘{if ($2 ~/image|video/) print $1 }’ | xargs rm -f'' +    * ''find . -type f -iname \*.jpg -o -iname\*.docx xargs cp -/path/destino/'' 
- +    * ''find . -type f -regex '.*\.\(jpg\|docx\)| xargs cp -t /path/destino'' 
-== ejemplos curiosos +  * cuenta directorios: ''find <PATH> -maxdepth 1 -type d -printf '.' | wc -c'' 
-  * Borrar recursivamente directorios vacios: ''find . -type d -empty -delete'' +  * Borrar recursivamente directorios vacios: ''find . -type d -empty -delete'' 
-  * Borrar recursivamente directorios vacios: ''find . -type d -empty -print0 | xargs -0 rmdir''+  * 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'' 
-  * 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'' + 
-  * buscar solo en archivos "ocultos" (en este caso 15 minutos atrás): ''$ find . -mmin -15 \( ! -regex ".*/\..*" \)'' +=== tiempo 
-  * buscar ficheros más recientes que otro fichero de referencia: ''$  find . -type f -newer <fichero-referencia>'' +  * buscar un fichero modificado hoy/ayer: 
-    * si queremos que sean anteriores al fichero de referencia: ''$  find . -type f ! -newer <fichero-referencia>''+    * hoy: ''find . -daystart -mtime 0'' 
 +    * ayer: ''$ find . -daystart -mtime 1'' 
 +  * 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 
 +    echo "look at my $file, my $file is amazing"; 
 +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>
  • linux/bash/find.1523441049.txt.gz
  • Darrera modificació: 11/04/2018 03:04
  • per mate