これは私のサンプルファイルです。
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
$name
ch 2 - file.txt
ch
その後、ファイル名を変更できます。
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"