Estoy utilizando findpara localizar y eliminar archivos de copia de seguridad, pero deseo excluir ciertos directorios de la búsqueda. Los nombres de los archivos de copia de seguridad podrían terminar en .bck, bak, ~, o backup.
El código de Ejemplo de trabajo mínimo (MWE) con solo tres directorios para excluir es:
#! /bin/bash
find . -type d \( -path "./.*" -o -path "./Music" -o -path "./Documents" \) -prune -o -type f \( -name "*.bck" -o -name "*.bak" -o -name "*~" -o -name "*.backup" \) -print0 | xargs -0 --no-run-if-empty trash-put
La sintaxis \( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -pruneparece un poco torpe, especialmente si hay alrededor de diez directorios para excluir, aunque solo he mostrado tres en el MWE.
¿Hay alguna forma más elegante de usar un archivo de entrada, con la lista de directorios excluidos, o una construcción tipo matriz o de lista, que podría ser puesta en servicio?
Lamento no haber sido más explícito cuando escribí mi pregunta original.
NB: trash-putes una utilidad que mueve los archivos al en Trashcanlugar de eliminarlos [1].

Con GNU find (es decir, bajo Linux no integrado o Cygwin), puede usar
-regexpara combinar todos estos-pathcomodines en una sola expresión regular.Con FreeBSD u OSX, use en
-Elugar de-regextype posix-extended.fuente
Agrupe
-path ... -pruneen una expresión encerrada\( ... \)usando-o( o ) lógica.El ejemplo directorios o archivos en o bajo no iterar
/somepath/a,/somepath/by/somepath/c.Aquí hay un ejemplo más específico que usa múltiples acciones.
fuente
Esto parece ser más una pregunta de concha que una
findpregunta. Con un archivo que contiene( -name dir1 -o -name dir2 ) -prune(¡no "\"!) Simplemente puede hacer esto:Sin
eval findembargo, sin cambiar la llamada de búsqueda en sí ( ao cambiando $ IFS), esto funciona solo con rutas sin espacios en blanco.Si desea mantener el archivo más simple, puede escribir un script.
Y use
en lugar.
fuente
-namebypath).\( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -pruneexcluir ciertos directorios de la búsqueda recursiva que lofindhace. No busco nada dentro de los archivos, sino que elimino ciertos archivos y evito ciertos directorios en mi ruta de búsqueda. Tampoco entiendo lo que tu script intenta hacer. Entonces, parece que tenemos una falta de comunicación. Lo siento. Dejémoslo así.