这是我的目录结构,我只想通过前两个目录名称将命名目录rev下的.html文件重命名。如何使用命令执行此操作?
prj3
|-- blk1
| |-- blk1.config
| |-- blk1.html
| |-- checklist13
| | |-- checklist13.config
| | |-- checklist13.html
| | |-- checklist13.html~
| | `-- rev2
| | |-- rev2.config
| | `-- rev2.html
| |-- checklist14
| | |-- checklist14.config
| | |-- checklist14.html
| | |-- checklist14.html~
| | `-- rev5
| | |-- rev5.config
| | |-- rev5.html
| | `-- rev5.html~
预期产量:
prj3
|-- blk1
| |-- blk1.config
| |-- blk1.html
| |-- checklist13
| | |-- checklist13.config
| | |-- checklist13.html
| | |-- checklist13.html~
| | `-- rev2
| | |-- rev2.config
| | `--checklist_13_rev2.html
| |-- checklist14
| | |-- checklist14.config
| | |-- checklist14.html
| | |-- checklist14.html~
| | `-- rev5
| | |-- rev5.config
| | |-- checklist_14_rev5.html
| | `-- rev5.html~
仅对于rev *文件夹内的所有rev * .html文件,都应该发生相同的预期输出。
这里有一个内胆,使用的组合find
,basename
以及dirname
:
find . -regex '.*/rev[0-9]+/rev[0-9]+.html' -exec sh -c 'mv -iv {} $(dirname {})/$(basename $(dirname $(dirname {})))_$(basename $(dirname {})).html' \;
它基本上使用find regex获取以rev#/ rev#.html结尾的路径,并使用组合构造新名称dirname
并basename
提取父目录和父目录的父目录的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句