文字列に数字を入力し、ファイル名を変更します。

文字列に数字を入力し、ファイル名を変更します。

このようなファイル名があります。

a2.txt.gz
d12.txt.gz
k5.txt.gz
m4.txt.gz
...

文字 1 個、数字 1 個または 2 個、その後に .txt.gz が続きます。以下のように数字の前にゼロを追加したいと思います。

a02.txt.gz
d12.txt.gz
k05.txt.gz
m04.txt.gz
...

似たようなことを試しましたが、うまくいかないようです。

find . | grep -E "[a-z][0-9]{1}\.+" | sed -er s/\([a-z]\)\([0-9]{1}\)\(.txt.gz\)/\10\2\3/

私のロジックは、最初に1桁のファイル名をgrepしてから、文字、数字、および.txt.gzの3つの部分に分割し、数字の前に0を追加することです。しかし、私はそれを動作させることはできません。名前を変更する部分はよくわかりません。

答え1

私はそうします: for f in [a-z][0-9].txt.gz; do mv $f "${f:0:1}0${f:1}" done

私はこれを他のものから適用しました(awkもっと必要なので使用しましたが、コメントのおかげでより良くしました)。

答え2

これにより、次のようになります。

find . -name '??.txt.gz' | sed -e 's/..\(.\)\(.*\)/mv \1\2 \10\2/' > /tmp/cmds
sh /tmp/cmds

このfindコマンドは、名前を変更する必要があるファイルのリストを取得します。このコマンドは、目的の操作を実行するsedコマンドのリストを作成します。mvこれらの内容はファイルに書き込まれ、シェルスクリプトで実行されます。

これをラインで行う方法があると確信していますが、怠惰な感じがします。

関連情報