Usando expressões regulares com cp

7

Esta é uma pergunta simples. Eu estou tentando copiar todos os arquivos no diretório atual que começam com "axis-2" e terminam com ".jar" em um diretório de destino, digamos que é ~ / MyDirectory. Meu primeiro pensamento foi tentar

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

Mas isso não está funcionando. Eu não tenho certeza se posso usar expressões regulares com o cp. Eu também não usei expressões regulares há algum tempo e minha sintaxe pode estar totalmente desativada. Quando eu tento este cp apenas gera uma mensagem de erro "Não existe arquivo ou diretório". Alguém tem alguma sugestão de como fazer isso? Obrigado!

    
por Nick Van Hoogenstyn 09.11.2011 / 05:54

3 respostas

13

O shell UNIX usa padrões de glob , não expressões regulares. Portanto, se você quiser corresponder os nomes dos arquivos que começam com axis2 e terminar com .jar , use:

cp axis2*.jar /destination/directory
    
por 09.11.2011 / 06:14
5

Se você tem o GNU find e o GNU cp disponíveis, você pode usar expressões regulares como no seguinte comando:

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

Isso pode ser útil se nem o padrão glob nem o bash extended glob forem compatíveis com as suas necessidades.

    
por 09.11.2011 / 09:11
0

Eu realmente gosto da sintaxe regex do script rename perl (por Robin Barker e Larry Wall), por exemplo:

rename "s/OldFile/NewFile/" OldFile*

OldFile.c and OldFile.h are renamed to NewFile.c and NewFile.h, respectively

Eu simplesmente queria exatamente a mesma coisa com um comando de cópia:

copy "s/OldFile/NewFile/" OldFile*

Então eu dupliquei esse script e mudei a instrução renomear para copiar via File::Copy . E voila! Um comando de cópia com a sintaxe perl-regex:

link

    
por 06.04.2018 / 18:50