#!/usr/bin/env ruby # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. -} # frozen_string_literal: true require 'fileutils' if ARGV.length == 3 Dir.glob("#{ARGV[0]}/**/*.#{ARGV[1]}").each do |original| new_name = original.sub /\.#{Regexp.escape(ARGV[1])}$/, ARGV[2] puts "Renaming #{original} to #{new_name}." FileUtils.mv original, new_name end else $stderr.puts <<~USAGE Usage: #{$0} directory old_extension new_extension The directory is searched recursively. The old and new extensions should not begin with a dot (.). Example: #{$0} src ce.vue vue Changes the extensions of all files matching src/**/*.ce.vue to .vue. USAGE exit 1 end