0

我有数千个文件需要使用以下格式重命名。2008:09:18:17:45:48-alfanumeric-alfanumeric.wav 第一部分是日期。

前任。2008:09:18:17:45:48-703-s.wav

A 想将其重命名为:

20080918.174548.703.s.wav

基本上是删除':'并制作更易于阅读的格式并且更容易拆分。

我知道重命名是我正在寻找的,但正则表达式不起作用。我正在输入:

重命名 's/(\d):(\d):(\d):(\d):(\d):(\d)-(.?)-(.?).wav/$1$2$3. $4$5$6.$7.$8.wav/' ./*

4

3 回答 3

2
rename 's/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)-([^-]+)-([^.]+).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*

应该使用 - 在您的版本中,您始终只匹配一位数字。另外,无需逃避 :.

于 2009-10-27T20:43:55.050 回答
1

您需要考虑多重性:

rename 's/(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)-(.*)-(.?).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*
于 2009-10-27T20:42:11.730 回答
1

如果这是你只要做一次的事情,我会这样做:

1) 将文件 ls 放入一个新文件:ls datadir > mytmp 2) 使用您喜欢的编辑器编辑 mytmp。2a 删除所有不是您关心的数据文件的行,例如“.”。和 ".." 2b 将每一行编辑成一个 shell 命令来重命名文件。我喜欢emacs,并会构建一个键盘宏来:剪辑文件名,插入“mv”,插入文件名,插入空格,再次插入文件名,将插入的文件名编辑为所需的格式。2c 保存 3) 运行 sh < mytmp

完毕!如果您的编辑器不支持宏或类似功能,则不优雅,乏味,但保证可以工作并且 git-er-done。

于 2009-10-27T20:44:44.863 回答