Bash/ターミナルを使用してファイル名を変換する方法

Bash/ターミナルを使用してファイル名を変換する方法

ファイルがたくさんあります。

academic-cap.svg         arrow-narrow-right.svg   
ban.svg                  chart-bar.svg
adjustments.svg          arrow-narrow-up.svg      
beaker.svg               chart-pie.svg
...
...

変えたい

  1. 最初の文字とダッシュの後には大文字で表記してください。
  2. ダッシュを削除
  3. 最後にアイコンを追加
  4. ファイル名をsvelteに変更します。
AcademicCapIcon.svelte   ArrowNarrowRightIcon.svelte   
BanIcon.svelte           ChartBarIcon.svelte
...

Bashスクリプトや端末をどのように使用しますか?

答え1

Perlベースのrenameユーティリティ(とも呼ばれるprename)を使用してください。

rename -n 's/./\U$&/;s/-(.)/\U$1/g;s/\.svg$/Icon.svelte/' -- *.svg

上記のコマンドは、ファイル名のワイルドカードパターンと一致する現在のディレクトリの各名前に3つのPerl代替操作を適用します*.svg

最初の置換は、s/./\U$&/ファイル名の最初の文字を独自の大文字のバリアントに置き換えます。

2 番目の置換は、s/-(.)/\U$1/gダッシュの後に表示される各文字をその文字の大文字バリアントに置き換えると同時にダッシュを削除します。

最後の代理人s/\.svg$/Icon.svelte/は、.svgファイル名のサフィックスをIcon.svelte

オプションを使用する-nと、renameファイル名の変換が表示されますが実行されません。後でファイル名を詳細に変更するように-n変更できます。-v

質問に名前を付ける例:

$ ls
academic-cap.svg         ban.svg
adjustments.svg          beaker.svg
arrow-narrow-right.svg   chart-bar.svg
arrow-narrow-up.svg      chart-pie.svg
$ rename -n 's/./\U$&/;s/-(.)/\U$1/g;s/\.svg$/Icon.svelte/' --  *.svg
rename(academic-cap.svg, AcademicCapIcon.svelte)
rename(adjustments.svg, AdjustmentsIcon.svelte)
rename(arrow-narrow-right.svg, ArrowNarrowRightIcon.svelte)
rename(arrow-narrow-up.svg, ArrowNarrowUpIcon.svelte)
rename(ban.svg, BanIcon.svelte)
rename(beaker.svg, BeakerIcon.svelte)
rename(chart-bar.svg, ChartBarIcon.svelte)
rename(chart-pie.svg, ChartPieIcon.svelte)

関連情報