Renomear arquivos em lote para minúsculas


17

Existe uma maneira de renomear todos os arquivos em um diretório para minúsculas | maiúsculas?

Estou procurando um comando oneliner .

Adorei o TotalCommander alt+f7, agora preciso dessa funcionalidade no Terminal

Respostas:


20

Para cada arquivo a_fileno diretório atual, renomeie a_filepara letras minúsculas.

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

Para maiúsculas, inverta os argumentos para [:lower:] [:upper:]

trlink de referência de comando

Atualizar

Para ainda mais controle *pode ser substituído por ls.

Por exemplo, em um diretório contendo 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg e 3.jpg para filtrar apenas arquivos * .jpg, lspode ser usado:

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

O código acima atribuirá à a_filevariável todos os arquivos com extensão .jpg.

Atualize a-v opção adicionada ao mvcomando conforme o sds sugerido.


4
você pode passar "-v" para mvver o que está sendo feito; que você pode não querer passar "-f" porque isso pode espancar os arquivos existentes
— sds

Isso não funciona para arquivos com espaços em seus nomes.
— Tianxiang Xiong

Você pode usar aspas ao redor do nome do arquivo.
— Stef K

2
Desculpe, mas a parte sobre ls * jpg é uma má ideia. mywiki.wooledge.org/ParsingLs Você pode obter o mesmo resultado com * jpg ao longo do local onde estava * em primeiro lugar.
— 21816

16

Existe um utilitário mais elegante e geral chamado prename.

Escrito por Larry Wall, ele vem com perlele, provavelmente já está disponível no seu sistema, pois /usr/bin/prename(se você tiver alternativas de instalação, também poderá estar disponível como /usr/bin/renamelink simbólico via / etc / alternative to prename)

Com ele, você pode renomear vários arquivos em um comando, fornecendo qualquer expressão perl (incluindo, sem limitação, substituição s///ou transliteração de char tr///):

Exemplos:

# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG

# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*

# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}'  *

E assim por diante.

Outra coisa interessante sobre o nome do arquivo é que ele protege você, no caso de renomear um arquivo para um nome de arquivo existente.

man prename para mais detalhes.


1

Usando find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

Para find

  • Claro que depois de -namecolocar o seu padrão.
  • -maxdepth 0: Somente diretório atual.

Para rename

  • -n, -nono: Nenhuma ação: imprima os nomes dos arquivos a serem renomeados, mas não renomeie.
  • y/source/dest/: Translitera os caracteres no espaço do padrão que aparecem na fonte para o caractere correspondente em dest.
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.