Copiando arquivos com várias extensões

15

Eu gostaria de copiar arquivos com várias extensões para um único diretório de destino.

Por exemplo, 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 é demorado para digitá-los como comandos separados (mesmo com o uso do histórico de comandos). Então, existe alguma maneira que eu possa dizer a cp para copiar arquivos com o padrão *.txt ou o padrão *.png para destination ? Idealmente, Eu gostaria de poder especificar mais de dois padrões - como instruir cp a copiar todos os arquivos *.txt ou *.png ou *.jpg 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 forma mais simples, apenas a partir do console? Eu poderia de alguma forma usar a expansão de chave para isso?

Eu sei que é possível copiar todos os arquivos no diretório de trabalho, exceto os correspondentes a certos padrões especificados , mas já que meu diretório de trabalho contém muito mais extensões de arquivo que eu não quero copiar do que aqueles que eu faço, isso seria uma dor.

Você tem alguma opinião sobre isso?

    
por Andrew 24.09.2014 / 18:24

2 respostas

43

A expansão de cinta fará o trabalho. man bash e procure por Brace Expansion .

cp *.{txt,jpg,png} destination/

EDITAR:

De acordo com a solicitação do OP, o comando acima estava sem a opção detalhada:

cp -v *.{txt,jpg,png} destination/
    
por 24.09.2014 / 18:51
0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

Isso funciona!

    
por 06.11.2016 / 12:03