Não.
O comando cp
não possui a capacidade de processar qualquer um dos seus argumentos como expressões regulares. Mesmo curingas não são manipulados por ele (ou pela maioria dos executáveis); em vez disso, eles são manipulados pela casca.
cp test/* test2/
é realmente expandido pelo bash, e tudo o que cp
realmente vê para seus argumentos é cp test/file1 test/file2 test/file3 test2/
(ou o que for apropriado com base no conteúdo real de test/
).
Além disso, não acho que sua expressão, [^\.php]
, corresponda ao que você deseja (não corresponde apenas aos arquivos que contêm .php
).
Você provavelmente desejará examinar o utilitário find
para filtrar uma lista de arquivos com base na expressão regular e, em seguida, usar xargs
para aplicar a lista de arquivos retornados ao comando cp
(presumindo que o find não tenho um manipulador embutido para copiar arquivos; não estou intimamente familiarizado com a ferramenta).
Você pode tentar:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
Isso diz para procurar recursivamente no diretório atual por arquivos que não contenham ".php" no caminho e copiá-los em /destination/folder/
.
Conforme solicitado, um detalhamento mais específico dos argumentos:
-
.
- Localização para iniciar a pesquisa - neste caso, o diretório atual -
!
- operador "Não", inverta o resultado do próximo teste -
-iregex
- Teste de expressão regular sem distinção entre maiúsculas e minúsculas. O próximo argumento é a expressão. -
".*\.php.*"
- Expressão regular correspondente a<Anything>.php<Anything>
- Qualquer arquivo que tenha ".php" em algum lugar no caminho. (Nota, incluindo estar dentro de uma pasta que contém ".php" no nome, você precisaria de uma expressão mais complexa para corresponder apenas aos arquivos) -
-exec
- Executa um comando se os testes anteriores retornarem true. O próximo argumento é o comando, todos os argumentos restantes até;
são passados para o comando. o{}
é um argumento especial que representa o nome do arquivo. -
cp
- O comando que encontrar 'deve ser executado em cada um dos nomes de caminho correspondente. -
{}
- O caminho para o arquivo que foi encontrado, passado paracp
como um argumento para que ele saiba qual arquivo copiar -
/destination/folder/
- argumento passado paracp
, informandocp
para onde deve copiar o arquivo. -
\;
- Este é o;
terminator que-exec
está procurando. Nós escapamos com um\
para que seu shell não tente analisá-lo e, em vez disso, o alimente como um argumento para o comando (find
)
É muito difícil escrever uma expressão regular que corresponda a "strings que não têm .php
", então, em vez disso, dizemos find
para pesquisar strings que do contêm .php
e inverta os resultados com !
.