Como renomear vários arquivos removendo a extensão?


13

Eu tenho vários arquivos tiff chamados:

sw.001.tif
sw.002.tif
...

e quero remover o .tifno final de cada um dos arquivos. Como posso usar o renamecomando para fazer isso?


2
Lembre-se de que nenhum sistema de arquivos linux ou unix usa "extensões" no estilo Windows ou VMS - é apenas por convenção que um sufixo do nome do arquivo é ".tif" ou ".c" ou ".o" ou ".so " como queiras.
22612 Bruce Ediger

Isso é bom ... Eu estou a importação de arquivos de Windows para Linux :)
Paul

1
Tecnicamente, o Windows também não usa extensões de arquivo, mas o gerenciador de arquivos do Windows 95 continuou usando os últimos caracteres do nome do arquivo para determinar o tipo de arquivo após interromper o esquema de nomeação do MS-DOS e a convenção permaneceu desde então.
RAKK 20/02

Respostas:


23

perl's rename(como normalmente encontrado no Debian, onde também é chamado prename), ou este derivado ( renamepacote no Debian):

rename 's/\.tif$//' *.tif

util-linux rename(como normalmente encontrado no Red Hat, rename.ulno Debian):

rename -- .tif '' *.tif

(observe que esse seria renomeado blah.tiffany.tifpara blahfany.tif)


2
Eu acredito que o renomeado "Debian" é de Larry Wall (vem com Perl?) E o "Red Hat" é do util-linux (rename.ul no Debian IIRC).
XTL

@XTL: Verdadeiro. Eu os chamo assim porque são os programas de "renomeação" encontrados nos derivados Debian ou Red Hat.
Ignacio Vazquez-Abrams

Muito obrigado! Eu nunca percebi que havia versões diferentes de 'renomear'. Eu assumo que existem outras diferenças sutis entre os comandos no debian & redhat. Vou ter que procurar algumas de suas diferenças.
Paul

6

Para uma não renomeação, você pode fazer:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i para advertir contra a substituição de um arquivo)


15
Versão mais for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
segura e

+1 no último comentário aqui. É mais seguro em nomes de arquivos com espaços vazios.
Petobens 14/05/19

1
@ jw013 seu comentário deve ser uma resposta de nível superior.
Roland

1
rename -- .oldext .newext *.oldext

Isso substitui a extensão antiga pela nova. Para simplesmente remover a extensão, você pode transmitir explicitamente uma string vazia como argumento.

rename -- .gz.tmp  '' *.gz.tmp

Com o comando acima, todos os arquivos com .gz.tmpextensão na pasta atual serão renomeados para filename.gz.

Consulte o artigo: Linux: remova extensões de arquivos para vários arquivos para obter detalhes.


1
Isso pressupõe que a implementação util-linux renameseja incompatível com (e muito mais limitada que) o renamecomando tradicional do perl.
Stéphane Chazelas

Observe também que ele substitui a primeira ocorrência de .oldextdentro do nome do arquivo, não necessariamente a extensão ( foo.oldextasy.oldextseria renomeada para footasy.oldext).
Stéphane Chazelas

1

Se você usar o IBM AIX, não terá um renamecomando; portanto, para remover extensões de arquivo em lote, será necessário usar comandos simples do System V UNIX da baunilha:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

-2

podemos fazer isso recursivo

for i in *.gz; do mv -i $i `basename $i .gz`; done
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.