在Linux中使用正则表达式重命名文件


9

我有一组文件要统一重命名,这些文件的命名如下

"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"

我希望它们为小写yyyymmdd .log扩展名

"system.20090101.log"
"something.20090101.log"

Answers:


14

我曾经写过perl脚本来做到这一点,直到发现重命名命令为止。

它接受perl正则表达式进行重命名:

为此,我只键入了两个命令:

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log

对于某些发行版,rename它没有此功能(请参见其手册页),您可能必须安装perl-renameprename


非常好的答案
Judioo,

8
当心,一些发行版会发布毫无价值的重命名命令。检查您的发行版最先发行的。
德罗伯特

我知道,mmv但最终由于rename我可以使用正则表达式的力量
Ludovic Kuty 2014年

5
在Arch Linux上是perl-rename
Oleh Prypin 2014年


5

mmv是用于移动/重命名多个文件的标准Linux实用程序。对于大多数发行版,可以从存储库中获得。对于上面的示例,您可以执行以下操作:

mmv *-Log-*-*-*-NODATA.txt #l1.#4#3#2.log

有关更多信息,请阅读此debaday文章手册页


5

renameutil不是很“标准”。每个发行版均附带不同的rename工具。例如,在Gentoo上,rename来自sys-apps/util-linux软件包,不支持正则表达式。

Hamish Downer建议mmv,它似乎很有用,特别是在脚本内部使用。

另一方面,在一般情况下,您可能需要namedutils。它具有qmvqcp命令,这将打开您选择的文本编辑器(我的偏好:Vim),并允许您在此处编辑目标文件名。保存并关闭编辑器后,qmv/ qcp将进行所有重命名。

双方mmvqmv都足够聪明,重命名以正确的顺序文件,并检测圆形重命名,并在必要时会自动创建一个临时文件。


在Gentoo上,您还可以出现该sys-apps/rename程序包,该程序包将为您提供renamexm正则表达式重命名以及大写/小写和其他一些不错的功能。
radicand

1

公平起见:

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *.txt

给出以下输出:

Use of uninitialized value $4 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $3 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $2 in regexp compilation at (eval 1) line 1.

但:

rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log

给出正确的输出:

System-Log-01-01-2009-NODATA.txt renamed as System.20090101.log
System.20090101.log renamed as system.20090101.log

将{-n}开关替换为{-v}


1

我创建了一个小的bash脚本来执行此操作:

#!/bin/bash

for f in `ls /path/to/folder`; do
  # Create new filename from the old one
  # This example replaces A (upper case) with a (lower case)
  new_file=`echo "$new_file" | tr A a`

  # Rename the file
  mv "$f" "$new_file"
done

通常,解析ls输出不是最好的主意。随机搜索在Unix上进行了这种冗长的读取SE供您娱乐。| 另外你的答案会更好地匹配有问题tr '[:upper:]' '[:lower:]'
HBruijn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.