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 acp
como argumento para que sepa qué archivo copiar/destination/folder/
- argumento pasado acp
, diciendocp
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