Usar expresiones regulares con cp


11

Esta es una pregunta simple. Estoy tratando de copiar todos los archivos en el directorio actual que comienzan con "axis-2" y terminan con ".jar" en un directorio de destino, digamos que es ~ / MyDirectory. Mi primer pensamiento fue intentar

cp '^axis2.*jar$' ~/MyDirectory

Pero esto no está funcionando. Ni siquiera estoy seguro de poder usar expresiones regulares con cp. Tampoco he usado expresiones regulares en mucho tiempo y mi sintaxis podría estar totalmente desactivada. Cuando intento este cp, solo aparece el mensaje de error "No existe tal archivo o directorio". ¿Alguien tiene alguna sugerencia de cómo hacer esto? ¡Gracias!

Respuestas:


15

El shell de UNIX usa patrones globales , no expresiones regulares. Entonces, si desea hacer coincidir los nombres de archivo que comienzan axis2y terminan con .jar, use:

cp axis2*.jar /destination/directory

¡Muchas gracias! Lo descubrí por mi cuenta, pero no sabía acerca de los patrones globales, por lo que es útil e informativo.
Nick Van Hoogenstyn

7

Si tiene GNU findy GNU cpdisponibles, puede usar expresiones regulares como en el siguiente comando:

find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
       -exec cp -t ~/MyDirectory {} +

Esto puede ser útil si ni el patrón de globo ni el patrón de globo extendido bash satisfacen sus necesidades.


0

Realmente me gusta la sintaxis regex del renamescript perl (por Robin Barker y Larry Wall), por ejemplo:

rename "s/OldFile/NewFile/" OldFile*

OldFile.cy OldFile.hse renombran a NewFile.cy NewFile.h, respectivamente

Simplemente quería exactamente lo mismo con un comando de copia:

copy "s/OldFile/NewFile/" OldFile*

Así que dupliqué esa secuencia de comandos y cambié la declaración de cambio de nombre para copiar File::Copy. Et voila! Un comando de copia con sintaxis perl-regex: jcward / vopy .

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.