用数字批量重命名文件夹

用数字批量重命名文件夹

我需要批量重命名名为 plt 的文件???到 plt????.

它们的数字顺序是从 0 到 99500,每 500 个,但我有一些超过 100,000 个,所以我希望它们全部是 6 位数字。

目标:当前 - plt99500 目标 - plt099500

任何帮助,将不胜感激

答案1

如果我们可以假设您的所有文件都位于同一目录中,则所有文件都不能具有相同的名称(例如,您没有plt500并且已经有plt000500),全部名称只包含plt数字,并且所有以 开头的文件都plt需要重命名,那么你可以这样做:

for f in plt*; do
   numNoZero=$(sed 's/^0*//' <<<"${f/plt/}")
   echo mv -- "$f" "$(printf 'plt%06d' "$numNoZero")";
done

首先,我们迭代名称以 开头的所有文件和目录(让我们知道是否需要跳过目录)plt,将每个文件和目录保存为$f.接下来${f/plt/}是删除的文件名plt,因此它应该只是数字。我们通过一个sed命令来提供此结果,该命令删除任何前导 0(如果有),并将结果(没有前导 0 的数字)保存为$numNoZero.接下来,我们使用printf,告诉它打印plt,然后打印数字,填充到 6 位数字 ( %06d) 并将其用作我们想要的名称mv

如果这看起来正确,请删除echo并重新运行以实际重命名文件。

或者,如果您有 Perl (在 Ubuntu 和其他 Debian 系统或其他系统上rename称为Perl ),您可以这样做:renameperl-renameprename

rename -n 's/plt0*(\d+?)$/sprintf("plt%06d", "$1")/e' plt*

答案2

使用珀尔的rename(可在任何操作系统中使用):

rename -n 's/\d+/sprintf "%06d", $&/e' ./plt[0-9]*

删除-n开关,又名试运行当你的尝试令人满意时重命名为真实的

相关内容