Remove os parâmetros GET dos nomes dos arquivos no diretório

1

Eu preciso remover a parte que começa com ? de um monte de arquivos com nomes como image.jpg?foo=bar&bar=foo . Alguém poderia me mostrar como é feito?

Esses comandos não estão funcionando por algum motivo:

rename "\?." "" *
rename 's/(.*)\.jpg\?.*/$1\.jpg/' *
    
por Artem Gordinsky 01.08.2014 / 13:14

1 resposta

2

Isso é simples:

Estamos trabalhando em um loop for em todos os arquivos, cujo nome contém um ' ? '.

Esse loop chama um comando mv (== rename) com todos esses arquivos, mais esses nomes de arquivos sem a parte deles depois que ' ? '.

O comando exato é o seguinte:

for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done

O que parece ser um pouco enigmático, é o "${i%%\?*}" . Isso significa: "a variável chamada 'i', removida de sua cauda depois de um ' ? '.

Há também um pouco de coisa enigmática, que é a parte *\?* . Isso significa todos os arquivos no diretório atual, cujo nome contém um ' ? '. Este é um padrão, assim como em (win) do (w) s, a única diferença é que ' ? ' significa por padrão todos os caracteres. A barra invertida (' \ ') é usada para remover esse significado especial disso.

    
por 01.08.2014 / 13:43

Tags