Alterando a extensão do arquivo

2

Em uma pasta eu tenho um arquivo .run e estou tentando mudar a extensão para .clu. O problema é que eu tentei

rename 's/.run$/.clu/' *.run

Mas isso não faz absolutamente nada ao arquivo.

Observação: não estou tentando converter o arquivo, apenas para renomear a extensão.

    
por Dobz 27.06.2014 / 12:47

4 respostas

6

Eu não sei qual é o seu problema. O que você postou funciona:

$ mkdir test
$ touch test/test{01..10}.run
$ rename 's/\.run$/.clu/' test/*.run -vn
test/test01.run renamed as test/test01.clu
test/test02.run renamed as test/test02.clu
test/test03.run renamed as test/test03.clu
test/test04.run renamed as test/test04.clu
test/test05.run renamed as test/test05.clu
test/test06.run renamed as test/test06.clu
test/test07.run renamed as test/test07.clu
test/test08.run renamed as test/test08.clu
test/test09.run renamed as test/test09.clu
test/test10.run renamed as test/test10.clu

O -vn está nos dizendo o que faria se fosse executado sem ele.

Estou fugindo do ponto (de outra forma, é um REGEX "qualquer coisa"), mas não faz diferença alguma aqui. Funciona bem sem isso.

É possível que você esteja realmente executando rename.ul ? Verifique se você está usando a renomeação Perl (que usa a sintaxe que estamos usando) com dpkg -S $(readlink -f $(which rename))

  • perl: /usr/bin/prename é bom.
  • util-linux: /usr/bin/rename.ul é ruim. Por algum motivo, você está usando uma versão muito limitada de renomeação. Algo muito brando aconteceu.

Por enquanto, veja se prename existe (você pode usar isso por enquanto) e se não, comece a perguntar por que o Perl não está instalado corretamente. Sugiro que você não tenha o Ubuntu instalado.

Ou, se estiver satisfeito com rename.ul , o seguinte deverá funcionar:

rename.ul .run .clu *.run

Mas isso pode acabar com um arquivo como test.run.hooray.run em test.clu.hooray.clu , o que obviamente não é ótimo.

    
por Oli 27.06.2014 / 13:19
2

Você acabou de usar mv :

mv oldname newname

mv é usado para mover / renomear arquivos. Consulte a man page de mv para mais.

    
por jobin 27.06.2014 / 12:48
2

O meu preferido em casos como este é mmv (ele não é instalado por padrão no Ubuntu, mas você pode instalá-lo usando o comando sudo apt-get install mmv ):

mmv -n '*.run' '#1.clu'

O -n significa que é um teste e não irá realmente alterar nenhum arquivo. Ele mostrará uma lista de arquivos que seriam renomeados se você removesse o -n . No caso acima, ele converterá todos os arquivos no diretório atual de uma extensão de arquivo de .run para .clu .

mmv -v '*.run' '#1.clu'

O -v é opcional, mas é uma boa idéia incluí-lo porque é o único registro que você terá das alterações feitas pelo comando renomear.

Veja man mmv para mais informações.

    
por Radu Rădeanu 27.06.2014 / 13:44
1

Você não precisa usar para usar rename para isso. Você pode fazer isso usando basename :

for f in *run; do mv "$f" "$(basename "$f" .run)".clu; done

basename imprime o nome de um arquivo (sem caminho) e também remove um sufixo opcional. Portanto, "$(basename "$f" .run)".clu é o nome do arquivo $f com a extensão .run substituindo por clu .

Você também pode usar os recursos de manipulação de string do :

do bash
for f in *run; do echo mv "$f" "${f%%.run}".clu; done

A construção ${var%%string} remove a string string do final da variável $var .

    
por terdon 27.06.2014 / 13:41