【发布时间】:2014-12-15 12:36:56
【问题描述】:
我目前正在使用一堆单行代码来重命名 bash 中生成的图标文件。
for f in black/*.png ; do mv $f "${f%%.png}_black.png" ; done
for f in blue/*.png ; do mv $f "${f%%.png}_blue.png" ; done
for f in brown/*.png ; do mv $f "${f%%.png}_brown.png" ; done
for f in green/*.png ; do mv $f "${f%%.png}_green.png" ; done
for f in grey/*.png ; do mv $f "${f%%.png}_grey.png" ; done
for f in red/*.png ; do mv $f "${f%%.png}_red.png" ; done
for f in white/*.png ; do mv $f "${f%%.png}_white.png" ; done
for f in yellow/*.png ; do mv $f "${f%%.png}_yellow.png" ; done
但是男孩是啰嗦。鉴于文件夹结构,我可以使用更惯用 BASH 的单行版本吗?我只是想知道我是否错过了一个技巧。
我在 Mac OS X Darwin 命令行上运行,所以没有 rename 和 prename :-( 并且更喜欢纯 bash。
-- 编辑
所以它不会在 cmets 中迷失 - Tim Zimmerman 的回答是单行的:
for d in */; do for f in $d*.png ; do mv "$f" "${f%%.png}_${d%%/}.png" ; done ; done
在${f%%.png}_${d%%/}.png 中进行第二次重命名是一个让我难过的技巧。
【问题讨论】:
-
是的,我可以,除非问题中提到,在香草 MacOS X Darwin 上似乎没有
rename。