我需要批量重命名名为 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 ),您可以这样做:rename
perl-rename
prename
rename -n 's/plt0*(\d+?)$/sprintf("plt%06d", "$1")/e' plt*
答案2
使用珀尔的rename
(可在任何操作系统中使用):
rename -n 's/\d+/sprintf "%06d", $&/e' ./plt[0-9]*
删除-n
开关,又名试运行当你的尝试令人满意时重命名为真实的。