ディレクトリにSVGファイルがたくさんあります。
0.svg
1.svg
2.svg ...
42Group.svg
500px.svg
file1.svg
file2.svg ...
ファイル名が数字で始まる場合は、文字Aを追加したいと思います。
0.svg
たとえば、に変更したいと思いますA0Solid.svelte
。
現在のファイル名を変換する方法は次のとおりです。
rename -v 's/./\U$&/;s/-(.)/\U$1/g;s/\.svg$/Solid.svelte/' -- *.svg > /dev/null 2>&1
しかし、これは0.svg
に変換されます0Solid.svelte
。に変更したいですA0Solid.svelte
。
Bash / Shellを使用してこれを行うにはどうすればよいですか?
[Updates]
:ファイル名に42Group.svg 500px.svgを追加しました。
ベストアンサー1
代わりに、次のようzsh
に名前bash
を変更してください。<digits>.svg
A<digits>Solid.svelte
autoload -Uz zmv
一括名前autoload
変更zmv
機能(最高~/.zshrc
)
zmv -v '(<->).svg' 'A${1}Solid.svelte'
zmv
Perlベースの名前変更を使用すると、次のコマンドを使用して同じ操作を実行できます(protectionなしで)。
rename -v 's/^(\d+)\.svg\Z/A${1}Solid.svelte/' [0-9]*.svg
[0-9]*.svg
0〜9の範囲の文字(一部のシェルでbash
は0123456789を含むがこれに限定されない)で始まり、で終わるファイル名に拡張されますが.svg
、rename
ASCII 10進数(0123456789)の後に.svg
。
globを使用すること[0-9]*.svg
は、ファイル名がで始まらないことを意味します。これは、すべてのバリアントではなくサポートを-
必要としないことを意味します(他のバージョンでは、これを省略するとコマンドインジェクションの脆弱性が発生します!)。誰もがそれをサポートしているわけではありません。--
perl
rename
-v
ファイルのルート名を大文字にして追加する場合はSolid.svelte
、だけでなくbeのA
ように数字で始まるファイル名プレフィックスを使用し、コードで試しているように、次のようにします。foo-bar.svg
FooBarSolid.svelte
0.svg
A0Solid.svelte
0foo-bar.svg
A0FooBarSolid.svelte
zmv -v '([0-9]#)(*).svg' '${1:+A$1}${${(C)2}//-}Solid.svelte'
または以下を使用してrename
:
rename -v 's{^\./(\d*)(.*)\.svg\Z}{
($1 eq "" ? "" : "A$1") . ($2 =~ s/\w+/\u$&/gr =~ s/-//gr) . "Solid.svelte"
}ge' ./*.svg
これとは対照的に、zmv
ASCIIテキストでのみ機能します(たとえば、大文字éric
としては使用できません)。Éric
; $_ = "A$_" if /^\d/
または、既存のコードが満足しているA
場合は、ファイル名が10進数で始まる場合は、プレフィックスaを追加してコードを拡張できます。