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]+\./-/.' {} ";"
我将重命名 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]+\./-/.' {} ";"