アンダースコアの前後の内容を切り替えてファイル名を再管理します。

アンダースコアの前後の内容を切り替えてファイル名を再管理します。

いくつかのファイルの名前を次の形式に変更したいと思います。

ABCD_20181102.jpg
DEDE_2_20181030.jpg

通常、4つのランダムな文字で構成され、その後に下線と日付(年、月、日)が表示されます。または、任意の4文字、下線、ランダムな数字、下線、日付順です。

このファイルの名前を日付(または必要に応じて任意の数字)に変更し、次の任意の文字に変更したいと思います。

20181102_ABCD.jpg
20181030_2_DEDE.jpg

ベストアンサー1

パラメータ拡張を使用して文字列の一部を抽出できます。#左から削除し、%右から削除し、シンボルを2倍に増やすと、可能な限り長い一致が削除されます。

#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
    suffix=${f#*.}
    before_underscore=${f%%_*}
    after_underscore=${f#*_}
    after_underscore=${after_underscore%.$suffix}
    if [[ $after_underscore = *_* ]] ; then
        before2=${after_underscore%_*}
        after2=${after_underscore#*_}
        after_underscore="$after2"_"$before2"
    fi
    echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done

スクリプトが要件を満たしていることを確認したら、古いechoコンテンツを削除してください。mv

おすすめ記事