Linux 批量重命名文件

Linux batch rename files

我将重命名 Linux 文件夹中的图像文件和 pdf 文件。

应该是递归的,因为有些文件在子文件夹中。

当前文件名模式如下:

an-yt-h-in-g-123word-123456-anything.jpg (.png .pdf)

我的目标模式是

123456-anything.jpg (.png .pdf)

简而言之,我想删除 -NumberString- 之前的所有内容,并保留之后的所有内容(包括 NumberString)。

有人可以帮忙吗?非常感谢

如果你所有的文件都严格按照你说的命名,你可以使用命令

echo $s | awk -F'-' '{printf "%s-%s", , }'

获取新名称,假设原始文件名由s持有。

重命名可以简单地用mv

来完成
mv $s $(echo $s | awk -F'-' '{printf "%s-%s", , }')

其中 s 也是原始文件名。

该命令将检查最后一个"number string"的位置并输出从该位置到末尾的子字符串。您可以将 ls 命令更改为其他命令。

ls | awk -F '-' '{ for(i=NF; i>=0; i--) { if (match($i, /^[0-9]+$/)) { print $i; for (j=i+1; j<=NF; j++){ printf "-%s" ,$j }; print "\n" } } }' ORS=""

an-yt-h-in-g-123word-123456-anything.jpg

对于 jpeg 的平面目录:

rename 's/.*-[0-9]+-[A-Za-z]+\./-/.' *.jpg 

递归访问当前目录:

find . \(-name "*.jpg" -o -name "*.pdf" \) -exec rename 's/.*-[0-9]+-[A-Za-z]+\./-/.' {} ";"