renomeando arquivos em um diretório

2

Eu tenho arquivos em um diretório. Os nomes dos arquivos são construídos usando uma notação de data e hora, os nomes dos arquivos são da seguinte forma:

nome_YYMM.csv

Eu quero renomear todos esses arquivos usando a seguinte convenção de nomenclatura:

name_YYYYMM.csv

Não tenho certeza se posso usar um utilitário de linha de comando como o grep para fazer isso, ou se preciso escrever um script bash para fazer isso.

Qualquer ajuda sobre como resolver este problema será bem-vinda.

Estou no Ubuntu

    
por Takashi 10.12.2010 / 11:58

3 respostas

2

Uma maneira muito simples de fazer isso

ls name* | while read a; do mv $a 'echo $a | sed s/name_/name_20/'; done

ou

ls name* | while read a; do mv $a $(echo $a | sed s/name_/name_20/); done

(desde que o uso de back-quotes é depreciado (ou difícil de ler de qualquer maneira))

lista todos os arquivos que correspondem a name_ . Em seguida, para cada arquivo encontrado, ele substitui name_ por name_20 . Você pode mudar de 20 a 19 se estiver trabalhando com arquivos do último milênio.

    
por 10.12.2010 / 13:22
1

É provável que você tenha um programa ou script Perl chamado rename em seu sistema.

Para a versão Script Perl :

rename 's/_/_20/' *_*.csv

Para a versão util-linux-ng :

rename _ _20 *_*.csv

Ou usando o Bash:

for f in name*; do mv "$f" "${f/_/_20}"; done
    
por 10.12.2010 / 17:42
0

No zsh:

autoload zmv
zmv '(*_[0-9][0-9])([0-9][0-9].csv)' '${1}20${2}'

Você pode tornar o padrão menos preciso, por exemplo, '(*_??)(??.csv)' ou mesmo '(*)(??).csv' se não houver risco de correspondência de outros arquivos.

Se você não quiser usar o zsh, consulte a resposta de Dennis Williamson .

    
por 10.12.2010 / 22:50