Actualmente estoy tratando de find
(y copiar) todos los archivos y la estructura de carpetas que coinciden con un patrón específico, en un directorio específico y ¡estoy tan cerca!
Específicamente, quiero copiar recursivamente todas las carpetas que no comiencen con un carácter '_' desde una ruta especificada.
find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;
En / source / path / with / directorios / path hay directorios específicos de la máquina que comienzan con '_' y otros, y solo estoy interesado en copiar los otros. Por una razón más allá de mí, el comando find devuelve el directorio / source / path / with / directorios / y, por lo tanto, copia su contenido, los directorios comienzan con '_' incluido.
Alguien tiene una pista de por qué es eso?
Gracias,
Pascal
Respuestas:
find
devuelve la ruta raíz porque coincide con sus criterios, es decir, es un directorio y no comienza con_
.Estás buscando
-mindepth 1
, sospecho:Referencia: encontrar página de manual
fuente
Cambiar de:
a:
De esa manera
/source/path/with/directories
no se incluirán.Esto
shopt -s dotglob
es para que*
también coincida con los archivos y directorios que comienzan con un.
(archivos ocultos, directorios).Y todo está envuelto en un sub-shell
(...)
para limitar el efectoshopt
solo dentro del sub-shell, de lo contrario, tendría que deshacerlo más tardeshopt -u dotglob
.fuente
.
. Tampoco intentes.*
, o combinarás muchas otras cosas que nunca quisiste. ;-)shopt
.