.bak _before_ファイル拡張子を持つバックアップファイル

.bak _before_ファイル拡張子を持つバックアップファイル

私は通常、次のようにバージョン管理なしでサーバーの構成ファイルをバックアップします。

# cp httpd.conf{,.bak}
# ls
httpd.conf    httpd.conf.bak

ただし、Webルートにあるファイルの場合は、.bakファイル拡張子を慎重に追加して.php保存し、ApacheがまだPHPインタプリタを介してファイルを送信できるようにします(誰かがそのようなファイルが存在するかどうかを推測または調査する場合)。サーバー):

$ cp index.php index.bak.php
$ ls
index.php    index.bak.php

.bakファイル拡張子の前にタブ補完機能とマッスルメモリを挿入する方法はありますか?Tab{}←,.bak私は、ネットワークルートにあるファイルに対してこのクールな「ミットマクロ」を使用できないことを筋肉記憶で学びました。

ありがとうございます。

ベストアンサー1

簡単かもしれません

cp file.{ext,bak.ext}

bash {}拡張子はすべての組み合わせに拡張されます(既存のファイルをリストする[]拡張子とは異なり)。したがって、2つのファイル名を生成します。

{ .... , .... } には、 file.ext と file.bak.ext をインポートするための 2 つのオプションがあります。

スクリプトで次を使用します。

cp $FILE.{$EXTENTION,bak.$EXTENTION}

FILENAMEを半分に分割するには、次のものを使用できます。

FILE=${FILENAME%.*}
EXTN=${FILENAME##*.}

${VAR%xxxxx} は、パターンが一致するまで VAR からコンテンツの左側を返します。上記の場合、パターンは.*なので、最後の.*を除くすべての項目が得られます。

${VAR##xxxxx} は、一致するパターンの後に VAR のコンテンツの右側を返します。二重ハッシュは、可能な一致が複数ある場合、可能な最大一致を得ることを意味する。

スクリプトを保存するには、FILE、EXTENTIONをインポートした後に他の状況があることを確認してください。ファイル名に拡張子がない場合、これが発生します。

スクリプトのサブセクションは次のとおりです。

ls *html | while read FILENAME
do
    FILE=${FILENAME%.*}
    EXTN=${FILENAME##$FILE}
    cp $FILE{$EXTN,.bak$EXTN}
done

おすすめ記事