我有一个包含 5000 多张图像的文件夹,全部带有 JPG 扩展名。
我想要做的就是递归地向所有图像添加“thumb_”前缀。
我发现了一个类似的问题:重命名文件和目录(添加前缀) https://stackoverflow.com/questions/4787413/rename-files-and-directories-add-prefix但我只想为带有 JPG 扩展名的文件添加前缀。
可能的解决方案之一:
find . -name '*.jpg' -printf "'%p' '%h/thumb_%f'\n" | xargs -n2 echo mv
原理:找到所有需要的文件,并为标准准备参数mv
命令。
Notes:
- 的论点
mv
被包围'
用于允许文件名中包含空格。
- 缺点是:这不适用于包含以下内容的文件名
'
撇号本身,就像许多 mp3 文件一样。如果您需要搬家更奇怪文件名检查如下。
- 上面的命令是为了dry run(仅显示带参数的 mv 命令)。对于实际工作,请删除
echo
假装mv
.
任何文件名重命名。在 shell 中,您需要一个分隔符。问题是,通常比文件名(存储在 shell 变量中)can包含分隔符本身,因此:
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 "
正确的解决方案是:
- 准备一个具有正确转义的文件名
- 使用易于理解任何文件名的脚本语言
准备正确的转义bash它的内部是可能的printf
and %q
格式化指令=print quoted
。但这个解决方案又长又无聊。
恕我直言,最简单的方法是使用perl
和零填充print0
,就像下一个一样。
find . -name \*.jpg -print0 | perl -MFile::Basename -0nle 'rename $_, dirname($_)."/thumb_".basename($_)'
上面使用 perl 的功能来混合文件名并最终重命名文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)