aboutsummaryrefslogtreecommitdiff
path: root/bin/rename.rb
blob: 654f220f99ae026a62954781cb8313433c5f0065 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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