Renomear: Como anexar uma palavra ou renomear vários arquivos [duplicados]

5

Eu tenho vários arquivos no meu diretório. por exemplo:

eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04

e eu quero mudar todos eles para

abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04

Como posso usar o comando mv para executar esta tarefa? Eu tenho usado isso

mv  eventDataLog.txt.2015-* ec2prod-eventDataLog.txt.2015-*
mv: target ‘ec2prod-eventDataLog.txt.2015-*’ is not a directory

mas não funciona

mas lembre-se que eu tenho muitos outros arquivos nesse diretório, então a resposta seria apropriada e também eu tenho que ignorar este arquivo eventDataLog.txt porque é um arquivo atual e em uso.

    
por Hassan Sohail 20.07.2015 / 18:06

4 respostas

10

Bash é bom para isso.

for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done

    
por 20.07.2015 / 18:29
6

Você pode fazer isso usando o rename comamnd. No seu caso, você faria rename eventDataLog.txt.2015 abc-eventDataLog.txt.2015 eventDataLog.txt* .

A sintaxe usada é rename frompattern topattern listoffilessuchaswildcardmatch .

    
por 20.07.2015 / 18:12
2

Eu usaria a ferramenta mmv e fiz

mmv eventDataLog.txt.\* abc-eventDataLog.txt.\#1

que é especificamente projetado para fazer renomeações em massa.

    
por 21.07.2015 / 09:39
0

Comando

for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done

Notas

  • egrep é a versão com capacidade de regex de grep e está incluída com grep na maioria das distribuições
  • Primeiro egrep filtrará todos os arquivos, começando com "eventDataLog"
  • O segundo egrep filtrará todos os arquivos que não (observe -v anotando uma correspondência inversa ) corresponder ao nome completo do arquivo que você deseja ignorar

Prova

$ ls -1
eventDataLog.txt
eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04
myOtherFile
mySecondOtherFile

$ for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done

$ ls -1
abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04
eventDataLog.txt
myOtherFile
mySecondOtherFile
    
por 20.07.2015 / 18:11

Tags