ファイル名の最後の数字部分を最初の部分にコピーします。

ファイル名の最後の数字部分を最初の部分にコピーします。
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

関連情報