如何解决将前导零添加到嵌套目录中的文件名中的数字
我正在使用 zsh
rename -e 's/\d+/sprintf("%02d",$&)/e' -- *.tif
我有这样的目录结构
root/
root/foo/
root/foo/a
root/foo/b
root/foo/c
root/bar/
root/bar/a
root/bar/b
root/bar/c
我想在每个目录中应用上面的命令。
我试过做类似的事情
find . -type d -exec "rename -e 's/\d+/sprintf("%02d",$&)/e' -- {}/*.tif" \;
但是,当目录为空(仅包含其他目录)并且结构中的所有 No such file or directory
文件均未重命名时,我得到 .tif
。
解决方法
只需使用 zmv
加 EXTENDED_GLOB
:
% cd $(mktemp -d)
% dirs=(root root/{foo,bar}/{,a,b,c})
% mkdir -p $dirs[@]
% touch $^dirs/1.tif
% print -c **(.)
root/1.tif root/bar/b/1.tif root/foo/a/1.tif
root/bar/1.tif root/bar/c/1.tif root/foo/b/1.tif
root/bar/a/1.tif root/foo/1.tif root/foo/c/1.tif
% autoload -Uz zmv
% setopt extendedglob
% zmv -Mv '(**/)(<->)(.tif)' '$1${(l:2::0:)2}$3'
mv -- root/bar/a/1.tif root/bar/a/01.tif
mv -- root/bar/b/1.tif root/bar/b/01.tif
mv -- root/bar/c/1.tif root/bar/c/01.tif
mv -- root/bar/1.tif root/bar/01.tif
mv -- root/foo/a/1.tif root/foo/a/01.tif
mv -- root/foo/b/1.tif root/foo/b/01.tif
mv -- root/foo/c/1.tif root/foo/c/01.tif
mv -- root/foo/1.tif root/foo/01.tif
mv -- root/1.tif root/01.tif
% print -c **(.)
root/01.tif root/bar/b/01.tif root/foo/a/01.tif
root/bar/01.tif root/bar/c/01.tif root/foo/b/01.tif
root/bar/a/01.tif root/foo/01.tif root/foo/c/01.tif
文档:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。