cómo hacer que 'buscar' no devuelva el directorio actual


11

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:


14

finddevuelve la ruta raíz porque coincide con sus criterios, es decir, es un directorio y no comienza con _.

Estás buscando -mindepth 1, sospecho:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Referencia: encontrar página de manual


¡Excelente! Funciona como yo quería. Lo tuve trabajando agregando! -nombre 'archivos' pero me pareció mal ...
Pinpin

0

Cambiar de:

find /source/path/with/directories ...

a:

(shopt -s dotglob; find /source/path/with/directories/* ... )

De esa manera /source/path/with/directoriesno se incluirán.

Esto shopt -s dotglobes 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 efecto shoptsolo dentro del sub-shell, de lo contrario, tendría que deshacerlo más tarde shopt -u dotglob.


Eso fallará para las entradas de directorio que comienzan con .. Tampoco intentes .*, o combinarás muchas otras cosas que nunca quisiste. ;-)
zigg

Buen punto, actualizó la respuesta, agregó usando shopt.
janos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.