Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia |
linux:bash:find [13/08/2018 06:06] – [ejemplos curiosos] mate | linux:bash:find [02/09/2024 02:10] (actual) – [tiempo] mate |
---|
* %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> |
| |
== 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 -mtime 0'' | * mostrar los ficheros que contienen una cadena: '' find . -exec grep -l "cadena" {} \;'' |
* ''$ find . -daystart -mtime 1'' : ayer | * hacer copias de seguridad de ciertos ficheros: ''find -name "*.txt" cp {} {}.bkup \;'' |
* mostrar los ficheros que contienen una cadena: ''$ find . -exec grep -l "cadena" {} \;'' | * renombrar ficheros: ''find -name "*.txt" -exec mv {} `basename {} .htm`.html \;'' |
* hacer copias de seguridad de ciertos ficheros: ''$ find -name "*.txt" cp {} {}.bkup \;'' | * cambiar espacios por subrayados: ''find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;'' |
* renombrar ficheros: ''$ find -name "*.txt" -exec mv {} `basename {} .htm`.html \;'' | * buscar los 5 archivos más grandes: ''find . -type f -exec ls -s {} \; | sort -n -r | head -5'' |
* 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'' | |
* copiar archivos de extensiones diferentes en una carpeta: | * copiar archivos de extensiones diferentes en una carpeta: |
* ''$ find . -type f -iname \*.jpg -o -iname\*.docx | xargs cp -t /path/destino/'' | * ''find . -type f -iname \*.jpg -o -iname\*.docx | xargs cp -t /path/destino/'' |
* ''$ 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'' |
== ejemplos curiosos | * 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'' |
* 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 |
| 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> |