加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为所有图像添加前缀(递归)

发布时间:2020-12-14 01:27:26 所属栏目:Linux 来源:网络整理
导读:我有一个包含超过5000张图像的文件夹,全部都带有JPG扩展名. 我想要做的是递归地将“thumb_”前缀添加到所有图像. 我发现了一个类似的问题:Rename Files and Directories (Add Prefix),但我只想在带有JPG扩展名的文件中添加前缀. 解决方法 可能的解决方案之
我有一个包含超过5000张图像的文件夹,全部都带有JPG扩展名.

我想要做的是递归地将“thumb_”前缀添加到所有图像.

我发现了一个类似的问题:Rename Files and Directories (Add Prefix),但我只想在带有JPG扩展名的文件中添加前缀.

解决方法

可能的解决方案之一:

find . -name '*.jpg' -printf "'%p' '%h/thumb_%f'n" | xargs -n2  echo mv

Principe:找到所有需要的文件,并为标准mv命令准备参数.

笔记:

> mv的参数被’包围’允许文件名中的空格包围.
>缺点是:这不适用于包含’撇号本身的文件名,就像许多mp3文件一样.如果您需要移动更多奇怪的文件名,请检查以下内容.
>以上命令用于空运行(仅显示带有args的mv命令).对于实际工作,删除假装mv的回声.

任何文件名重命名.在shell中你需要一个分隔符.问题是,文件名(存储在shell变量中)通常可以包含分隔符本身,因此:

mv $file $newfile         #will fail,if the filename contains space,TAB or newline
mv "$file" "$newfile"     #will fail,if the any of the filenames contains "

正确的解决方案是:

>使用正确的转义准备文件名
>使用脚本语言,可以轻松理解任何文件名

使用它的内部printf和%q格式化指令=打印引用,可以在bash中准备正确的转义.但这个解决方案漫长而无聊.

恕我直言,最简单的方法是使用perl和零填充print0,就像下一个.

find . -name *.jpg -print0 | perl -MFile::Basename -0nle 'rename $_,dirname($_)."/thumb_".basename($_)'

以上使用perl的功能来修改文件名,最后重命名文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读