通过删除编译器标记来重命名文件

通过删除编译器标记来重命名文件

给定

  1. 目录列表,例如dirs="Larry Curly Moe"
  2. 编译器供应商,例如-gcc-MN0

目标是扫描每个目录并截断所有文件名,如下所示:

intel-mkl/2018.1.163-gcc-7.1.0             -> intel-mkl/2018.1.163
exuberant-ctags/5.8-gcc-7.1.0              -> exuberant-ctags/5.8
superlu-dist/[email protected] -> superlu-dist/5.2.2

什么是有效且稳健的策略?

答案1

这可能对你有用:

从您的示例文件集开始:

$ find . -type f -name '*-gcc-*'
./intel-mkl/2018.1.163-gcc-7.1.0
./superlu-dist/[email protected]
./exuberant-ctags/5.8-gcc-7.1.0

这是一个删除任何文件名末尾的 -gcc-* 的脚本:

$ cat ex.sh
#!/bin/bash
for i in $(find . -type f -name '*-gcc-*'); do
    mv "$i" "$(echo "$i" | sed -e 's/-gcc-.*$//')"
done

运行脚本:

$ bash ex.sh

请注意,这些文件不再包含 -gcc-* 后缀:

$ find . -type f
./intel-mkl/2018.1.163
./superlu-dist/5.2.2
./exuberant-ctags/5.8

答案2

find+bash解决方案:

find . -type f -name "*-gcc-[0-9]*" -exec bash -c 'fn=${1%-gcc-*}; mv "$1" "$fn"' _ {} \;

相关内容