Como alterar a expressão no nome do arquivo?

5

Eu tenho pastas com vários arquivos nelas. Há uma expressão nos nomes que gostaria de alterar.

Por exemplo:

find /path/ -type f -name '*0050ABC_01032013*'

me dá uma saída assim:

/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/mesh/0050ABC_01032013_Rhemi.gii.minf
/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/Lcortex_0050ABC_01032013.nii
/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/Lgrey_white_0050ABC_01032013.nii.minf
/path/0050ABC_01032013/ct/CTpost_2013-3-1/registration/CT-0050ABC_01032013_CTpost_2013-3-1_TO_Scanner_Based.trm

Eu quero alterar 0050ABC_01032013 para 0044CBA_01011901.

Eu tentei isso:

find /path/ -type f -name '*0050ABC_01032013*' -execdir rename s/\.\/(w+)0050ABC_01032013(w+)$/044CBA_01011901/' {} \;

Mas não está funcionando. O que devo fazer?

    
por p.deman 29.11.2016 / 10:04

1 resposta

6

rename não é complicado :) Basta especificar a parte que você deseja alterar e o restante será deixado em paz. Use g para modificar todas as ocorrências no caminho (incluindo nomes de diretório)

find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;

Remova -n após o teste para realmente renomear os arquivos

find /path/ -type f -name '*0050ABC_01032013*' -exec rename 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;

Se você tiver um diretório em algum lugar no caminho com o mesmo nome e você não quiser alterar o nome do diretório, certifique-se de que apenas o nome da base seja modificado dessa forma

find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013([^\/]*)$/0044CBA_01011901/' '{}' \;

Isso evita a correspondência da string se houver um caractere / em qualquer lugar depois disso.

    
por Zanna 29.11.2016 / 10:12