Gostaria de copiar arquivos com várias extensões para um único diretório de destino.
Por exemplo, eu posso usar o seguinte comando para copiar todos os arquivos .txt no diretório de trabalho para um diretório chamado destination
:
cp -v *.txt destination/
E posso usar o seguinte para copiar todos os diretórios .png no diretório de trabalho para destination
:
cp -v *.png destination/
Mas consome tempo digitando-os como comandos separados (mesmo com o uso do histórico de comandos). Então, há alguma maneira que eu posso dizer cp
para copiar arquivos ou com o padrão *.txt
ou o padrão *.png
de destination
? Idealmente, eu gostaria de poder especificar mais de dois padrões - como instruções cp
para copiar todos *.txt
ou *.png
ou *.jpg
arquivos para destination
, por exemplo.
Tenho certeza de que tudo isso é possível usando um script de shell - estou usando bash
, por exemplo -, mas existe alguma maneira de realizá-lo de maneira mais simples, apenas no console? De alguma forma, eu poderia usar a expansão de chaves para fazer isso?
Eu sei que é possível copiar todos os arquivos no diretório de trabalho, exceto aqueles que correspondem a determinados padrões especificados , mas como meu diretório de trabalho contém muito mais extensões de arquivo que eu não quero copiar do que aquelas que eu faço , isso seria um problema.
Você tem alguma opinião sobre isso?
cp -v *.txt *.png destination/
?Respostas:
A expansão da cinta fará o trabalho.
man bash
e procureBrace Expansion
.EDITAR:
De acordo com a solicitação do OP, o comando acima estava ausente na opção detalhada:
fonte
cp data/images/*.{jpg,jpeg,png,mp4} destination/
e ummp4
arquivo não existir, eu recebo umNo such file or directory
erro que quebra o script. Posso fazer com que as múltiplas extensões manejem graciosamente quaisquer formatos ausentes?Isso está funcionando!
fonte