カレントディレクトリのファイル名の一部を一気に変更するワンライナー
例えば、カレントディレクトリに、
testvector_foo_aaa.result testvector_foo_bbb.result testvector_foo_ccc.result testvector_foo_ddd.result
なんてファイルがあったとして、そのファイル名の一部を変更したい…例えば、
testvector_bar_aaa.result testvector_bar_bbb.result testvector_bar_ccc.result testvector_bar_ddd.result
てファイル名に変更したいときのためのPerlスクリプトを書いたょ。オトモダチに使ってもらったら、便利そうだったので、自分で使っても便利だったので、晒すことにしたょ。renameをいっぱいするスクリプトだからrenrenて名前にしてるょ。
renren:
#!/usr/local/bin/perl -w use strict; die "Usage: renren <src> <dst>\n" if $#ARGV != 1; my ($src, $dst) = @ARGV; grep(($b = $_, $b =~ s/$src/$dst/g, print "\\mv -f $_ $b\n"), (grep(/$src/ && -f , <*>)));
で、上記の例の場合だと、
%renren foo bar \mv -f testvector_foo_aaa.result testvector_bar_aaa.result \mv -f testvector_foo_bbb.result testvector_bar_bbb.result \mv -f testvector_foo_ccc.result testvector_bar_ccc.result \mv -f testvector_foo_ddd.result testvector_bar_ddd.result
なんて吐いてくるから、てきとーにshellにパイプして下さい。いきなりmvするのは恐いので、実行されるコマンドを確認してからパイプするということでー。
で、これ、実質ワンライナーなので、ワンライナーにしてみたょ。
perl -e 'grep(($b = $_, $b =~ s/$ARGV[0]/$ARGV[1]/g, print "\\mv -f $_ $b\n"), (grep(/$ARGV[0]/ && -f , <*>)));' foo bar