
Show HN: Massren – multi-rename tool using your text editor - laurent123456
https://github.com/laurent22/massren
======
peterjmag
This is awesome! Really great work. I can think of about five different
instances in the last couple weeks where this could've really helped me out.
Oftentimes, I ended up just using something like NameMangler[1] instead and
pining for the flexibility of my editor.

For the other commenters in this thread that don't see the appeal or keep
comparing it to other alternatives, here's what's so compelling to me:

\- Editor agnostic. This isn't just for vim, people. ST2 is awesome for this
kind of thing.

\- Undo. _Easy_ undo. That's a killer feature, and I wouldn't be surprised if
it's unique to this tool.

Effusive praise aside, I ran into a couple small issues on OS X:

    
    
        $ massren --config editor 'subl'
        massren: Config has been changed: "editor" = "subl"
        $ massren
        massren: exec: "subl": executable file not found in $PATH
    

subl is indeed in my $PATH, but it's actually just a symlink to the ST2
application directory, as the ST2 docs suggest [2]. I solved this by just
adding the app directory to my $PATH, but it'd be nice to keep it out of there
if possible.

Also, I'd like to be able to pass switches along with my editor command, like
git config's core.editor [3]. However, this doesn't seem to work:

    
    
        massren: exec: "subl -wn": executable file not found in $PATH
    

Anyway, great work once again, and thanks for releasing such a cool tool!

[1] [http://manytricks.com/namemangler/](http://manytricks.com/namemangler/)

[2]
[http://www.sublimetext.com/docs/2/osx_command_line.html](http://www.sublimetext.com/docs/2/osx_command_line.html)

[3] [https://help.github.com/articles/using-sublime-text-2-as-
you...](https://help.github.com/articles/using-sublime-text-2-as-your-default-
editor)

~~~
laurent123456
Thanks for the feedback! I would have expected Go to find the subl executable
if it's in the PATH, even if it's a symlink but apparently not. I will check
if this can be improved.

At the moment, the tool indeed doesn't support parameters for the text editor,
though it's quite trivial to implement. I'm going to add this soon.

------
limmeau
Emacs users can use wdired in a dired buffer instead.

M-x wdired-change-to-wdired-mode

(not to spoil the fun of creating a useful command-line tool with Issue9 ;)

~~~
swah
Sorry, but what is Issue9?

~~~
autofill
Looks like it's a Go joke/shot:
[https://code.google.com/p/go/issues/detail?id=9](https://code.google.com/p/go/issues/detail?id=9)

------
felixr
You should also have a look 'vidir' from Joey Hess' moreutils [1]. I think it
is very similar.

Moretutils also includes 'vipe' (edit pipe in text editor) and other useful
utilities.

[1] [https://joeyh.name/code/moreutils/](https://joeyh.name/code/moreutils/)

~~~
e12e
Thanks for this. I've been using rename[1] (not actually from [2]) from time
to time, but I find it is annoying beyond the simplest of cases (eg: change
names to all lowercase).

vidir will probably serve me better.

[1] A utility that is distributed with perl (on Debian as /usr/bin/prename,
with a listing in /etc/alternatives for "rename")

[2] [http://en.wikipedia.org/wiki/Util-
linux](http://en.wikipedia.org/wiki/Util-linux)

------
atmosx
Smart :-)

Since "
_wget[https://raw.github.com/laurent22/massren/master/install/inst...](https://raw.github.com/laurent22/massren/master/install/install.osx.sh*")
comes out with certification error, because wget doesn't know github's
certification, you need to either add an ignore-cert option or you might wanna
change that option to '_curl -O
[https://raw.github.com/laurent22/massren/master/install/inst...](https://raw.github.com/laurent22/massren/master/install/install.osx.sh*")
which will not came out with an error. Also, curl is installed by default on
MacOSX while wget is not :-)

Cheers!

~~~
laurent123456
Thanks! I've updated the command lines to use curl instead of wget.

------
blueblob
This is cool. There is already a command called rename[1] that can do some of
this but this is much more interactive (and probably more intuitive for vi
users). Is this scriptable?

[1] [http://linux.die.net/man/1/rename](http://linux.die.net/man/1/rename)

~~~
laurent123456
Thanks, actually I've started developing massren after having tried `rename`,
after I realized I had no idea what flavor of regex and syntax I was supposed
to be using :) The advantage of using one's own text editor is that it's
always familiar.

Currently, the command is not really scriptable, but I'd be open to any
suggestion.

~~~
blueblob
I think the syntax is pcrepattern[1] though I may very well be wrong. I
definitely agree to the strength being that you know your editor.

I suppose scripting would be hard to do without knowing the editor. I
artificially applied vim as the editor because that was what you used in the
example. I very recently found vimcat[2] from another thread and thought that
something similar could be done with this. I guess it may not be much more
effective than just using sed and a for loop in <insert shell here> though.

[1]
[http://linux.die.net/man/3/pcrepattern](http://linux.die.net/man/3/pcrepattern)
[2]
[http://www.vim.org/scripts/script.php?script_id=4325](http://www.vim.org/scripts/script.php?script_id=4325)

------
b6fan
There is a vim plugin: rename.vim [1] which basically do the same job but
without go dependency.

[1]
[http://www.vim.org/scripts/script.php?script_id=1721](http://www.vim.org/scripts/script.php?script_id=1721)

~~~
TomNomNom
FWIW there is no Go 'dependency' unless you want to build from source.

Admittedly if there's no binary available for your platform then you need to
build from source.

------
p0ckets
How is this different from qmv?
[http://community.linuxmint.com/software/view/renameutils](http://community.linuxmint.com/software/view/renameutils)

~~~
laurent123456
I'm not familiar with qmv so I cannot tell but, if it's Linux-only, then one
advantage of massren is that it can work on any platform supported by Go
(currently tested on Windows, OSX and Ubuntu).

~~~
raimue
No, of course renameutils is not specific to Linux Why do you assume that? You
can get it from MacPorts or Homebrew for OS X and cygwin for Windows.

------
dewey
Would be great if someone could add it to homebrew. [0]

[0] [http://brew.sh/](http://brew.sh/)

~~~
msane
I would also like to be able to brew install this.

~~~
laurent123456
I've just submitted the homebrew package, let's see if they accept it -
[https://github.com/Homebrew/homebrew/pull/26819](https://github.com/Homebrew/homebrew/pull/26819)

~~~
seivan
Nice work!

------
bhousel
holy crap, it has an --undo switch!

Why don't more commands have this?

~~~
codereflection
Nice catch!

~~~
bhousel
Yeah I was impressed, I dug into the code a little to see how they accomplish
this. They store a sqlite database in ~/.config/massren that contains the
rename history and other configuration options. Pretty slick! The app is
written in very readable Go.

~~~
e12e
That's a nice feature to have. I would say that "undo" really should be
something in the filesystem, though. Like with nilfs2:

[http://www.nilfs.org/en/about_nilfs.html](http://www.nilfs.org/en/about_nilfs.html)

------
grimgrin
It seems like there is a neat thing that could be done with this sort of thing
+ id3 tags.

------
mcovey
One program I missed when I moved from Windows to Linux was Freename -
[http://freename.sourceforge.net/](http://freename.sourceforge.net/) \- which
does exactly this.

My solution was a bit hackier, a bash script that did spit out a bunch of
lines for each file in a directory, each with "(mv|cp) 'foo.bar' ''", ready
for me to edit and then paste back into a terminal window.

------
jweir
Great tool.

This wasn't clear from the README, but this will work with files across
directories (which is both useful and confusing)

massren __/ *foo.rb

Will rename matching files in different directories, but there is no
indication of what directories those are in the editor.

<snark>Also, how could you build something so useful without
generics!?</snark>

------
seniorsassycat
I wrote a hack that uses sed to rename files and I've been pretty happy with
it despite its simplicity.

[https://github.com/everett1992/utils/blob/master/sed-
utils/m...](https://github.com/everett1992/utils/blob/master/sed-utils/mv-sed)

------
seivan
Hmm should I look into getting this on homebrew? Would anyone other than me be
interested?

------
xbryanx
NameChanger is another great tool that helps with this family of tasks on OS
X.
[http://www.mrrsoftware.com/MRRSoftware/NameChanger.html](http://www.mrrsoftware.com/MRRSoftware/NameChanger.html)

------
aashishkoirala
Neat! Were you inspired somewhat by Git's interactive rebase or something
similar?

~~~
laurent123456
Yes! I think the interface of rebase is great. There are probably other
similar "complex" operations that can be simplified by opening a text editor.

------
dnr
It looks like there are lots of implementations of this idea or there. Here's
mine in 30 lines of bash:

[http://dnr.im/tech/articles/mvdir/](http://dnr.im/tech/articles/mvdir/)

------
spc476
You might also consider checking for the environment variable $EDITOR. It's
defined by POSIX and there are existing tools that use it.

------
rsync
I have been using the tool 'vimv' for years now ... how is this
different/worse/better ?

Perhaps the ability to define any editor ?

