回答:
これは、最後の質問のいずれかの回答をかなり小さな修正で行うことができます。
rename s/ras\.// sw.ras.*
または
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
説明:
rename
は、正規表現とファイルのリストperl
を受け取り、perl
各ファイルの名前に正規表現を順番に適用し、各ファイルの名前を正規表現の適用結果に変更するスクリプトです。私たちの場合、ras
はに一致し\.
、リテラルに一致し.
(.
単独で改行以外の文字を示します)、それを何も置き換えません。
for
ループは、すべてで始まるファイル取りsw.ras.
、その上(標準シェルのglob)とループを。${var/search/replace}
検索$var
用search
と置き換えで最初に出現するreplace
ので、${file/ras./}
戻って$file
最初とras.
削除。したがって、コマンドはファイルの名前をマイナスの同じ名前に変更しますras.
。この検索と置換で.
は、特殊文字としてではなく、文字通りに解釈されることに注意してください。
私は最近、ファイル名で複数回出現した文字の最後の出現を置き換える必要がある多くのファイルの一括名前変更を行う必要がありました。この特定のケースでは、最後のダッシュ-
をアンダースコアに置き換えなければなりませんでした_
:
some-long-file-name.ext
これに:
some-long-file_name.ext
少し時間がかかりましたが、これでようやくできました。
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
ここに:
${i%-*}
ファイル名の先頭から最後にダッシュが現れるまで一致します -
${file##*-}
ダッシュが最後に出現した後のファイル名の残りに一致します -
ras
、すなわちで終わるsw..001
、またはras.
、残しsw.001
?