重命名:如何附加单词或重命名多个文件

重命名:如何附加单词或重命名多个文件

我的目录中有多个文件。例如:

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,因为它是当前文件并且正在使用。

答案1

Bash 对此很有用。

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

答案2

您可以使用rename命令来完成此操作。在你的情况下你会这样做rename eventDataLog.txt.2015 abc-eventDataLog.txt.2015 eventDataLog.txt*

它使用的语法是rename frompattern topattern listoffilessuchaswildcardmatch.

答案3

我会使用这个mmv工具并做

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

这是专门为批量重命名而设计的。

答案4

命令

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

笔记

  • egrep是支持正则表达式的版本,grep并且包含grep在大多数发行版中
  • 首先egrep将过滤以“eventDataLog”开头的所有文件
  • 第二egrep将过滤所有文件不要(笔记-v注意到match)匹配您想要忽略的文件的全名

证明

$ 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

相关内容