Usando curingas para renomear em massa? [duplicado]

3

Percebi que havia nomeado um monte de arquivos de maneira desmembrada, então queria renomear qualquer arquivo começando com "1" para a mesma coisa, exceto começando com 2.

Por exemplo, mv 1.4.5.txt 2.4.5.txt ou mv 1-chart.jpg 2-chart.jpg etc.

Eu tentei mv 1* 2* , mas isso não foi aceito porque interpreta 2* como um diretório.

    
por Aruka J 13.10.2017 / 01:29

2 respostas

5

Os curingas não farão isso. Veja o resultado de echo mv 1* 2* . A melhor maneira é ( man rename ):

rename 's/^1/2/' 1*
    
por waltinator 13.10.2017 / 01:37
2

Você pode usar curingas dessa maneira se instalar mmv (embora eles devam ser citados - para que eles sejam interpretados por mmv em vez de pelo shell), e o curinga substituto assume o formato #n para substitua novamente o caractere curinga n th do padrão:

Usage: mmv [-m|x|r|c|o|a|l] [-h] [-d|p] [-g|t] [-v|n] [from to]

Use #[l|u]N in the ''to'' pattern to get the [lowercase|uppercase of the]
string matched by the N'th ''from'' pattern wildcard.

A ''from'' pattern containing wildcards should be quoted when given
on the command line. Also you may need to quote ''to'' pattern.

Use -- as the end of options.

Então, por exemplo

$ mmv -n -- '1*' 2#1
1.sh -> 2.sh : delete old 2.sh? n
1-chart.jpg -> 2-chart.jpg
1.4.5.txt -> 2.4.5.txt
1.csv -> 2.csv

(A opção -n permite que você execute um dry-run - remova-o para realmente renomear os arquivos.)

    
por steeldriver 13.10.2017 / 01:54