#!/bin/bash
shopt -s nullglob
for file in foo*
do
filename=${file%%[0-9]*}
num=${file##*[^0-9]}
newnum=$(printf "%03d" $num)
newfile=${filename}${newnum}
mv "$file" "$newfile"
done
Usando sed
, posso pesquisar e substituir texto em um arquivo. Existe uma maneira de pesquisar e substituir nomes de arquivos? Por exemplo, se eu tiver vários arquivos em uma pasta com nomes como estes:
Gostaria de renomear rapidamente todos os que estão começando com foo para que eles tenham 3 dígitos em vez de 2.
Existe um script Perl que já pode estar no seu sistema chamado rename
ou prename
.
rename 's/\d\d$/0$&/' foo*
Se você executar isso várias vezes, ele continuará inserindo zeros. Para evitar isso, esta versão só renomeia os arquivos que terminam com dois dígitos (precedidos por pelo menos um não dígito):
rename 's/([^\d])(\d\d)$/${1}0$2/' foo*
s///
é o comando substituto \d
significa um dígito $&
no primeiro exemplo significa tudo o que foi correspondido entre as duas primeiras barras (dois dígitos neste caso) [^\d]
significa todos os caracteres ( []
) que não são ( ^
) dígitos ( \d
) ${1}
significa o que foi correspondido no primeiro conjunto de parênteses (um não-dígito), as chaves definem o "1" como "0" literal $2
significa o que foi correspondido no segundo conjunto de parênteses (dois dígitos), as chaves não são necessárias aqui, mas você pode usá-las Se você usa MacPorts , existe um pacote chamado renameutils . Eu nunca usei, mas a partir da descrição, pode ser o que você quer.
renameutils - tools that make renaming files easier Description ¶
renameutils contains 5 programs: qmv, qcp, imv, icp, and deurlname
qmv and qcp use the aid of a text editor to create a "plan" that is executed when the file is saved - great for batch moves
imv and icp are interactive programs with GNU readline support
deurlname removes URL encoded characters from a filename
More info at the project's homepage http://www.nongnu.org/renameutils/
Dê uma olhada mmv
(deve estar disponível para todos os tipos de Linux, mas raramente é instalado por padrão).