Renomeia uma parte de vários arquivos

1

Pegue um número de arquivos chamados:

data_a_LT.fits
data_a_LT.coo
data_a_LT.ec
data_a_LT.grp

Eu quero substituir todos os "a_LT" por "LT_A" de tal forma que eu tenha:

data_LT_A.fits
data_LT_A.coo
data_LT_A.ec
data_LT_A.grp

Como se faz isso com um comando? Algo como:

mv *a_LT* *LT_A*
    
por Derek 19.09.2014 / 07:45

5 respostas

2

Se rename estiver disponível, use este comando:

rename 's/a_LT/LT_A/' *

Outra abordagem com awk :

find -type f | awk -F'a_LT' '{printf "mv \"%s\" \"%sLT_A%s\"\n", $0, $1, $2}' | bash
    
por 19.09.2014 / 07:59
3

Usando o bash:

for file in *; do [[ -f "$file" ]] && mv "$file" "${file/a_LT/LT_A}"; done
data_LT_A.coo
data_LT_A.ec
data_LT_A.fits
data_LT_A.grp
    
por 19.09.2014 / 07:53
2

Estou acostumado a usar xargs:

ls -1 | sed 's/\(\(.*\)a_LT\(.*\)\)/ LT_A/' | xargs -n 2 mv
    
por 19.09.2014 / 09:42
0

renomear pode não funcionar como esperado em sistemas baseados em CentOS. Nesse caso, você pode baixar este script e copie-o em sua máquina como $ HOME / bin / rename.pl.

rename.pl 's/a_LT/LT_A/g' * -vn

funcionará como esperado agora.

É melhor correr

rename.pl -n 's/a_LT/LT_A/g' *

antes de executar o primeiro comando, pois isso exibirá o resultado, sem realmente alterar os nomes.

    
por 19.09.2014 / 08:19
0

Eu fui para o seguinte que funcionou um tratamento.

rename 's/a_LT/LT_A/g' *

Um forro, conciso e fácil de lembrar.

    
por 22.09.2014 / 10:18

Tags