GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo usa expresiones regulares con el comando cp en Linux?

No.

El cp El comando no posee la capacidad de procesar ninguno de sus argumentos como expresiones regulares. Incluso los comodines no son manejados por él (o la mayoría de los ejecutables); más bien son manejados por el shell.

cp test/* test2/ en realidad está expandido por bash, y todo eso cp realmente ve porque sus argumentos son cp test/file1 test/file2 test/file3 test2/ (o lo que sea apropiado según el contenido real de test/ ).

Además, no creo que tu expresión, [^\.php] , coincidirá con lo que desee (no coincide solo con los archivos que contienen .php ).

Probablemente quieras mirar el find utilidad para filtrar una lista de archivos basada en expresiones regulares y luego usar xargs para aplicar la lista de archivos devueltos al cp comando (suponiendo que find no tenga un controlador integrado para copiar archivos; no estoy íntimamente familiarizado con la herramienta).

Podrías intentar:

find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;

Esto dice que busque en el directorio actual de forma recursiva archivos que no contengan ".php" en la ruta y cópielos en /destination/folder/ .

Como se solicitó, un desglose más específico de los argumentos:

  • . - Ubicación para iniciar la búsqueda - en este caso, el directorio actual
  • ! - Operador "No", invierte el resultado de la próxima prueba
  • -iregex - Prueba de expresión regular que no distingue entre mayúsculas y minúsculas. El siguiente argumento es la expresión.
  • ".*\.php.*" - Expresión regular que coincide con <Anything>.php<Anything> - Cualquier archivo que tenga ".php" en algún lugar de la ruta. (Tenga en cuenta que, incluido estar dentro de una carpeta que contiene ".php" en el nombre, necesitaría una expresión más compleja para que coincida solo con los archivos)
  • -exec - Ejecutar un comando si las pruebas anteriores devuelven verdadero. El siguiente argumento es el comando, todos los argumentos restantes hasta ; se pasan al comando. el {} es un argumento especial que representa el nombre del archivo.
  • cp - El comando que find` debe ejecutarse en cada uno de los nombres de ruta coincidentes.
  • {} - La ruta al archivo que se encontró, pasado a cp como argumento para que sepa qué archivo copiar
  • /destination/folder/ - argumento pasado a cp , diciendo cp donde debe copiar el archivo.
  • \; - Este es el ; terminador que -exec está buscando. Lo escapamos con un \ para que su shell no intente analizarlo y, en su lugar, lo alimente como un argumento para el comando (find )

Es bastante difícil escribir una expresión regular que coincida con "cadenas que no tienen .php ", entonces le decimos a find para buscar cadenas que hacen contiene .php y luego invertir los resultados con ! .


Puede usar algunas otras herramientas desde la consola, como grep y xargs.

ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder

Linux
  1. Cómo usar el comando grep de Linux

  2. Cómo usar el comando de historial en Linux

  3. Cómo usar el comando su en Linux con ejemplos

  4. Cómo usar el comando id en Linux

  5. Cómo usar el comando "pantalla" en Linux

Cómo usar el comando ping de Linux

Cómo usar el comando fd en el sistema Linux

¿Cómo usar el comando wget en Linux?

¿Cómo usar el comando xargs en Linux?

Cómo usar el comando RPM en Linux

Cómo usar el comando which en Linux