同じファイルをすべて1つの場所にコピーし、ファイル名をサブディレクトリ_ファイル名に変更します。

同じファイルをすべて1つの場所にコピーし、ファイル名をサブディレクトリ_ファイル名に変更します。

次のように、別のフォルダにconf.ymlファイルがあります。

/var/loyalty-badge/conf/conf.yml
/var/loyalty-level/conf/conf.yml
/var/promotion/conf/conf.yml
/var/featured/conf/conf.yml

今、私はそれらすべてがconf.ymlconfのようなフォルダをコピーしたいと思います。

ターゲットファイルは次のようにする必要があります

conf/loyalty-badge_conf.yml
conf/loyalty-level_conf.yml
conf/promotion_conf.yml
conf/featured_conf.yml

スクリプトを提案できますか?

答え1

簡単に使えますワイルドカードパターンファイルを列挙します…/conf/conf.yml。使うforループファイルを繰り返します。

for x in /var/*/conf/conf.yml; do …

すぐに次の部分を抽出する必要があります/var。あなたはこれを行うことができますシェル拡張機能:プレフィックスとサフィックスを削除します。 2つのステップで行います。/varプレフィックスを削除してから、/conf/conf.ymlサフィックスを削除します。

y=${x#/var}; y=${y%%/*}

今お互いを貼ります。

for x in /var/*/conf/conf.yml; do …
  y=${x#/var}; y=${y%%/*}
  cp -p "$x" "conf/${y}_conf.yml"
done

「テキストの後に続く値」${y}_conf.ymlとして解析されるので、中かっこが必要です。$y_conf.ymly_conf.yml

関連情報