bashシェルの両側に拡張子のないファイルを一覧表示しますが、元のファイルは保持します。

bashシェルの両側に拡張子のないファイルを一覧表示しますが、元のファイルは保持します。

次のファイルから拡張子とプレフィックスを削除したいと思います。

awstats.www.test1.com.conf
awstats.www.test2.com.conf
awstats.www.test3.com.conf

awstats.とを削除し.conf、ファイルはwww.test1.comそのままにしてください。どうすればいいですか?

答え1

ファイルと同じディレクトリにあるとします。

for name in awstats.*.conf; do
    basename "${name#awstats.}" .conf
done

ループ内のコードは最初にプレフィックスを削除し、次にawstats.標準引数置換を使用してサフィックスを削除します。$namebasename.conf

以下を呼び出さずに2つの手順で実行することもできますbasename

for name in awstats.*.conf; do
    newname=${name#awstats.}  # trim off prefix
    newname=${newname%.conf}  # trim off suffix
    printf '%s\n' "newname"
done

これら2つのループはファイル名を変更しません。

答え2

私はrenameperl-rename一部のシステムでは他のシステムでのみrename)ここが最も簡単だと思います。

rename 's/^awstats\.//;s/\.conf$//' awstats.*.conf

正規表現の説明:

  • s/^awstats\.//awstats.行(ファイル名)の先頭では何も変更しないでください。
  • s/\.conf$//.conf行末(ファイル名)を空白に置き換えます。

-nテストを実行するにはこのオプションを使用してください。

関連情報