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
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!
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
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.
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
andOldFile.h
are renamed toNewFile.c
andNewFile.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:
Tags cp regular-expression