次のファイルの名前を0、0.001、0.002、0.003 ...、0.035に変更したいと思います。
0、1、2、3...、35になります。
どうすればいいですか?
答え1
bash
回避策(extglobシェルオプションが有効な場合 - 参照パターンマッチングマニュアル)
for i in 0.* ; do mv "$i" "${i##0.*(0)}" ; done
${i##
i
変数の先頭から最も長い一致を削除します。0.
文字順一致0.
*(0)
0が0回以上表示されることを示します。
または不要な@Costasが提案したソリューション外部グローバル変数オプション
for i in 0.* ; do mv "$i" "${i#${i%%[!0.]*}}" ; done
${i%%
i
変数の末尾から最も長い一致を削除*
任意の文字、0回以上[!0.]
キャラクター以外のキャラクター0.
${i%%[!0.]*}
したがって、ORではなく最初の文字から最後まで効果的に削除します。例:for、for、およびfor文字列全体が削除されます。0
.
35
0.035
1
0.001
str0.00456a
0str0.00456a
str0.00456a
- 残りの文字(たとえば、
0.0
for0.035
と0.00
for0.001
が渡された${i#
後、これらの文字は変数の先頭から削除され、35
for0.035
と1
forになります)0.001
追加資料:パラメータ拡張
答え2
そしてrename
(prename
):
rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
-n
テストの実行が進み、変更に満足したら、次の手順を実行します。
rename 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
例:
% rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
0.001 renamed as 1
0.002 renamed as 2
0.003 renamed as 3
0.035 renamed as 35