ISS45_20200302030042.zip
R0387F200229.zip
この状況に適したシェルスクリプトが欲しいです。上には2つのファイル名があります。両方のファイル名の前に数字部分を追加したいと思います。私が望むものは、以下の例を参照してください。
20200302030042_ISS45_20200302030042.zip
200229_R0387F200229.zip
for f in *.zip; do
mv "$f" $(sed -E 's/^(.+)_([^.]+)\./\2_\1./' <<< "$f")
done
私はこれを使用しています。ファイルでのみ機能しますiss45
が、R
ファイルでは機能しません。
答え1
sed
必要なコマンドは次のとおりです。
sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
$ echo ISS45_20200302030042.zip |
sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
20200302030042_ISS45_20200302030042.zip
$ echo R0387F200229.zip |
sed --posix -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
200229_R0387F200229.zip
答え2
Perl-ishバージョンの名前変更を使用できる場合(そうでない場合でも、正規表現は.で動作する必要がありますsed -r
。)
rename 's/^(.*[^0-9]+)([0-9]+)([.]zip)$/$2_$1$2$3/' *.zip
名前を右から左に3つの部分(拡張子$3
、拡張子の前の数字ブロック$2
、その前のすべての部分)に論理的に分割します$1
。
その後、あらかじめ用意された作品と一緒に縫います$2
。