如何从许多文件中删除文件名的特定部分

我有一份来自Windows电脑的旧备份,但大部分文件末尾都有一个时间戳。所有文件需要保留原始名称,但不包括该时间戳。
如何从多个文件夹中的所有文件中删除特定部分(2019_04_12 11_03_06 UTC)?
示例文件:
messages (2019_04_12 11_03_06 UTC).properties
maintenancemode (2019_04_12 11_03_06 UTC).jar

据我所知,所有的文件都具有相同的时间戳。

mmv '* *.*' '#1.#3' - user986805
2个回答

Perl的rename命令非常强大。它可以查找字符串模式并进行替换。如果您的文件具有相似的时间戳,这将起作用:
rename -n 's/\(2019.*?\)//' *

这将删除所有类似于(2019...)的字符串。因此,如果某些文件具有不同的时间戳,也无关紧要。
通过在.*后面添加?来使匹配变为非贪婪模式(感谢Steeldriver)。因此,表达式只会匹配到第一个)出现之前的字符,而不是字符串中可能出现的其他位置。 -n选项使命令只显示即将执行的操作,而不实际进行重命名。这样可以先仔细检查输出结果,如果显示命令将按照您的意愿执行,则可以再次运行它,但不带-n选项以实际进行重命名。
该工具可能不会默认安装。您可以使用以下命令进行安装:
sudo apt install rename

谢谢,但我刚用一个小程序修复了它。我觉得你的答案可能有效。 - Tjeard

我修复了这段代码中的问题。
find . -maxdepth 20 -type f | while read LINE 
do
mv "$LINE" `echo $LINE | sed 's/\s(2019_04_12 11_03_06 UTC)//'`
done