ファイル名の変更ループが正しく機能しません。

ファイル名の変更ループが正しく機能しません。

フォルダには32個の* .ddsファイルがあります。

pic-0.dds, pic-1.dds, pic-2.dds,...,pic-31.dds

名前を次のように変更したいと思います。

015040.dds, 015041.dds, 015042.dds,...,0150471.dds.

次のスクリプトを使用しようとしています。

#!/bin/bash
j=39;
for i in *.dds;
do let j+=1;
mv $i 0150$j.dds;
done

pic-0.dds名前がに変更されましたが、エラー015040.ddsが発生しました。つまり、名前が等pic-1.ddsに変わりませんでした。015041.dds

次のような他の名前を変更するための共通スクリプトが必要です。

pic-40.dds, pic-41.dds, pic-42.dds,...,pic-53.dds

到着する:

0191.dds, 0192.dds, 0193.dds,...,0204.dds

ベストアンサー1

問題は、pic-*.ddsダッシュの後の数字ではなく文字順にファイルを並べ替えることです。

0この問題を解決する1つの可能な方法は、ファイル名の後にダッシュを挿入することですpic-{0..9}.dds。その後、ファイルをアルファベット順にリストすることは、数値順にソートするのと同じで、すべてがうまく機能します。

すでに使用したものと同様のループを使用してこれを実行できます。

for f in pic-?.dds ; do
    mv "$f" pic-0"${f#pic-}"
done

${f#pic-}これはパラメータの置換#、このシンボルは、変数$ fの値の先頭から文字列を削除するようにシェルに指示します。pic-

おすすめ記事