コンパイラフラグを削除してファイル名を変更する

コンパイラフラグを削除してファイル名を変更する

与えられた

  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"' _ {} \;

関連情報