如何使用linux命令按以前的目录名称重命名.html文件?

如何使用linux命令按以前的目录名称重命名.html文件?

这是我的目录结构,我想仅根据其前两个目录名称重命名指定目录 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 文件应该发生相同的预期输出。

答案1

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 结尾的路径,并使用组合构造新名称dirnamebasename提取父目录和父目录的父目录的名称。

相关内容