シェルスクリプトで複数のファイル名を変更する

シェルスクリプトで複数のファイル名を変更する

次のファイルの名前を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.350.03510.001str0.00456a0str0.00456astr0.00456a
  • 残りの文字(たとえば、0.0for0.0350.00for0.001が渡された${i#後、これらの文字は変数の先頭から削除され、35for0.0351forになります)0.001

追加資料:パラメータ拡張

おすすめ記事