在 shell 中删除文件名的开头和结尾

在 shell 中删除文件名的开头和结尾

我想将我的手机屏幕截图重命名为 Screenshot_2020-08-06-16-13-43-731_com.tclhz.gallery.jpg2020-08-06.jpg

关于文件名的固定部分,我想对其进行概括,这样我就可以删除 N 个第一个字符和 N 个最后一个字符。

该怎么办呢?

谢谢!

答案1

您可以使用shell 字符串操作的功能。假设您的文件名存储在变量中name,以下两行将删除第一个下划线之前的所有内容,然后删除以该-hh-mm-ss部分开头的所有内容。然后手动重新添加文件扩展名。

newname="${name#*_}"
newname="${newname%-??-??-??-*}.jpg"

然后,您可以发出命令

mv "$name" "$newname"

重命名文件。

例子:

$ name="Screenshot_2020-08-06-16-13-43-731_com.tclhz.gallery.jpg"
$ newname="${name#*_}"; newname="${newname%-??-??-??-*}.jpg"; echo "$newname"
2020-08-06-16.jpg

为了处理当前目录的全部内容:

for name in *.jpg
do
    newname="${name#*_}"
    newname="${newname%-??-??-??-*}.jpg"
    mv "$name" "$newname"
done

相关内容