Unix: Procura e substitui nomes de arquivos

0

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:

  • foo01
  • foo02
  • bar001
  • bar002

Gostaria de renomear rapidamente todos os que estão começando com foo para que eles tenham 3 dígitos em vez de 2.

    
por Svish 30.07.2010 / 15:57

4 respostas

2
#!/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
    
por 30.07.2010 / 16:11
1

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
por 30.07.2010 / 16:47
1

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/

    
por 30.07.2010 / 17:27
0

Dê uma olhada mmv (deve estar disponível para todos os tipos de Linux, mas raramente é instalado por padrão).

    
por 30.07.2010 / 17:29