Переименование: как присоединить слово или переименовать несколько файлов

У меня есть несколько файлов в моем каталоге. например:

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 

и я хочу изменить их все

 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 

Как я могу использовать команду mv для выполнения этой задачи? Я использую это

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

но не работает

но помните, что у меня есть много других файлов в этом каталоге, поэтому ответ будет одобрен, а также я должен проигнорировать этот файл eventDataLog.txt, потому что он является текущим файлом и используется.

Бэш хорош для этого.

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

Вы можете выполнить это с помощью rename comamnd. В вашем случае вы бы rename eventDataLog.txt.2015 abc-eventDataLog.txt.2015 eventDataLog.txt* .

Синтаксис, который он использует, rename frompattern topattern listoffilessuchaswildcardmatch .

Я бы использовал инструмент mmv и сделал

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

который специально предназначен для массовых переименований.

команда

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

Заметки

  • egrep – это версия grep совместимая с регулярным выражением, и включается в grep в большинстве дистрибутивов
  • Первый egrep будет фильтровать все файлы, начинающиеся с "eventDataLog"
  • Второй egrep будет фильтровать все файлы, которые этого не делают (отметьте -v отмечая обратное совпадение), чтобы соответствовать полному имени файла, который вы хотите игнорировать

доказательство

 $ 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