Sua abordagem no caminho certo só precisa de alguma precisão. Você poderia fazer isso:
for file in ./*.png; do mv "$file" "${file%%-*}.png"; done
Eu tenho uma pasta com vários arquivos de imagem PNG. Eu preciso cortar os nomes dos arquivos para remover algumas informações do final.
Por exemplo,
some file-170227-222746.png
some other file-170228-222742.png
another file-170226-222743.png
Eu preciso remover tudo após o - enquanto retendo a extensão .png, para acabar com:
some file.png
some other file.png
another file.png
Todos os arquivos são arquivos de imagem PNG e não é necessário manter os arquivos originais.
Eu tentei isso, que funciona, mas faz a coisa errada, na medida em que remove a extensão .png
for file in *.png; do
mv -- "$file" "$(file%%.png"
done
O comando mv acima pode ser retrabalhado para fazer o que eu preciso? Devo usar um método diferente?
Obrigado
Sua abordagem no caminho certo só precisa de alguma precisão. Você poderia fazer isso:
for file in ./*.png; do mv "$file" "${file%%-*}.png"; done
Se você tiver acesso ao script perl rename
, também poderá usar
rename -n 's/(.*).{14}(\.png)/$1$2/' *
Remova -n
após o teste para realmente renomear os arquivos.
-n
imprime o que será alterado, na verdade não faz nada s/old/new
replace old
com new
(.*)
salva todos os caracteres nessa posição para mais tarde .{14}
exatamente 14 caracteres (\.png)
save .png
$1$2
imprime o primeiro padrão salvo e o segundo padrão salvo Obrigado por toda a ajuda a todos.
A melhor solução que tenho é:
for file in ./*.png; do
mv "$file" "${file%%-17*}.png"; done
Observe o -17. Isso evita o problema de os arquivos serem cortados demais quando eles têm um traço inicial antes da área que eu preciso cortar.
Por exemplo,
some file-name-170227-222746.png
é cortado para:
some file-name.png
Em vez de:
some file.png