如何为递归找到的不含FLAC标识的目录批量添加[FLAC]后缀
如何为递归找到的不含FLAC标识的目录批量添加[FLAC]后缀
嘿,我来帮你搞定这个批量重命名的需求!你已经精准筛选出了目标目录,接下来只需要把这些目录批量重命名就行,这里有几个实用的方法,都是原生工具或者常用命令,不用装额外软件:
方法一:用
find+mv原生组合(最通用)
这里要注意一个关键细节:递归处理目录重命名时,一定要先处理子目录再处理父目录,不然先改了父目录的名字,后续子目录的路径就会失效。我们可以给find加-depth参数实现这个逻辑,命令如下:find . -type d -not -iname '*flac*' -depth -exec mv {} "{} [FLAC]" \;简单拆解下:
-depth:让find从最深层级的目录开始遍历处理,完美避免父目录改名影响子目录的问题-exec mv {} "{} [FLAC]" \;:对每个找到的目录执行重命名,{}会被替换成当前找到的目录路径,直接在后面拼接[FLAC]
方法二:用
rename命令(更简洁,适合有perl版rename的系统)
如果你的系统装了perl版本的rename(很多Linux发行版默认带),可以用正则表达式更优雅地完成重命名:find . -type d -not -iname '*flac*' -depth -exec rename 's/$/ [FLAC]/' {} \;这里的正则
s/$/ [FLAC]/意思是:在每个目录名的末尾($匹配行/字符串结尾)添加[FLAC]后缀。重要测试建议
为了避免误操作,你可以先预览所有要执行的重命名命令,只需要在mv或rename前面加echo即可:# 预览mv版本的操作 find . -type d -not -iname '*flac*' -depth -exec echo mv {} "{} [FLAC]" \; # 预览rename版本的操作 find . -type d -not -iname '*flac*' -depth -exec echo rename 's/$/ [FLAC]/' {} \;确认所有预览的重命名路径都是你想要的,再去掉
echo执行真实操作就好啦!
备注:内容来源于stack exchange,提问作者Gianfranco
相关产品推荐
相关产品推荐

