このようなファイル名があります。
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
これらの内容はファイルに書き込まれ、シェルスクリプトで実行されます。
これをラインで行う方法があると確信していますが、怠惰な感じがします。