Here’s a one-liner for changing a bunch of filenames all at once.
Say you’ve got a bunch of
but you agree with the React team that
.jsx file extension has outlived its usefulness.
How do you rename all those files to end in
.js in just one line of bash code?
for filename in $(ls src/*.jsx); do git mv $filename $(echo $filename | sed -E "s/jsx/js/"); done
For readability, on multiple lines it looks like this:
$ for filename in $(ls src/*.jsx) > do git mv $filename $(echo $filename | sed -E "s/jsx/js/") > done
The next does something more complicated:
echo $filename | sed -E "s/jsx/js/"
This runs the
s/jsx/js regular expression pattern substitution through
Note that the
-E option is only valid for OS X bash.
In other shells, you might need
-e or other command-line flags instead.
When I wrote this command, I spent ten seconds writing everything else,
and about 15 minutes tracking down the right syntax for sed.
Anyway, sed stands for “stream editor”,
so if you pipe the output of
echo SomeComponent.jsx into sed like this,
it’s going to edit that stream and pass it through as the string
$() passes along its subshell output as a string,
git mv SomeComponent.jsx SomeComponent.js
And because it’s iterating over your
you’ll run that for every
.jsx file in your