ファイル名の1桁の数字に0を追加します。

ファイル名の1桁の数字に0を追加します。

これは私のサンプルファイルです。

user@linux:~$ ls -l | cut -d ' ' -f 10-

ch 10 - file.txt
ch 2 - file.txt
ch 3 - file.txt
ch 4a - file.txt
ch 5 - file.txt
user@linux:~$ 

0任意の単一の数字を含めたい4aので、最終出力は次のようになります。

user@linux:~$ ls -l | cut -d ' ' -f 10-

ch 10 - file.txt
ch 02 - file.txt
ch 03 - file.txt
ch 04a - file.txt
ch 05 - file.txt
user@linux:~$ 

Linuxに組み込まれているツールを使ってこれは可能ですか?

ベストアンサー1

模様

'ch '[1-9][!0-9]*'- file.txt'

変更する必要があるすべてのファイル名(表示されるファイル名の外部)と一致します。つまり、で始まり、ch その後に1から9までの数字が続き、その後に数字以外の名前が続くすべてのファイル名と一致します。それ以降はすべての文字を受け入れ、名前はで終わる必要があります- file.txt

私たちはこれらのファイルを繰り返すことができます

for name in 'ch '[1-9][!0-9]*'- file.txt'; do
    ...
done

今、目標は0そのビットの後に1つを挿入することですch ch 部分文字列を削除して次に置き換えますch 0

for name in 'ch '[1-9][!0-9]*'- file.txt'; do
    newname='ch 0'${name#ch }
done

パラメータ置換は含まれている場合${name#ch }に拡張されます(接頭辞が削除されます)。2 - file.txt$namech 2 - file.txtch 

その後、ファイル名を変更できます。

for name in 'ch '[1-9][!0-9]*'- file.txt'; do
    newname='ch 0'${name#ch }

    printf 'would rename "%s" into "%s"\n' "$name" "$newname"
    # mv -i "$name" "$newname"
done

ループを一度実行したら、#コメントアウトされたmvコマンドを含む行を削除し、正しい操作を実行していることを確認してください。

表示されるファイル名が与えられると、上記のループが出力されます。

would rename "ch 2 - file.txt" into "ch 02 - file.txt"
would rename "ch 3 - file.txt" into "ch 03 - file.txt"
would rename "ch 4a - file.txt" into "ch 04a - file.txt"
would rename "ch 5 - file.txt" into "ch 05 - file.txt"

おすすめ記事