如何从大量文件中删除文件名的特定部分

如何从大量文件中删除文件名的特定部分

我有一个来自 Windows PC 的旧备份,但大多数文件末尾都有时间戳。所有文件都需要保留其原始名称,但没有该时间戳。

如何(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

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

答案1

perlrename命令功能强大。它可以查找字符串模式并替换它们。如果您的文件有类似的时间戳,则可以使用以下命令:

rename -n 's/\(2019.*?\)//' *

这将删除所有看起来像的字符串(2019...)。因此,即使某些文件具有不同的时间戳,也不会有影响。

?通过附加到.*(感谢 Steeldriver),匹配变得非贪婪。因此,表达式将仅匹配直到第一次出现 的字符),而不是字符串中可能出现的其他字符。

-n选项使命令仅显示将要执行的操作。重命名操作并未有效完成。这允许您首先仔细检查输出,如果它显示该命令将执行您想要的操作,则重新运行该命令,而无需选择实际继续-n重命名。

该工具可能未默认安装。您可以使用以下命令安装它:

sudo apt install rename

答案2

我用这段代码修复了这个问题

find . -maxdepth 20 -type f | while read LINE 
do
mv "$LINE" `echo $LINE | sed 's/\s(2019_04_12 11_03_06 UTC)//'`
done

相关内容