フォルダ名をファイル名に含ませる(その2)


アニメ『ツルネ ―風舞高校弓道部―』

弓道かっこえええ。音はぜんぜん気になってなかったんですが、いい音するんですねえ、弦。

前回フォルダ名をファイル名に含ませるというファイル名変更で、たくさん手順を書いたのですが、手順が3段階ぐらいになったら、もう私などはとても覚えられません。
もっと簡単なのじゃないと仕事で使えません。
Perlでスクリプト生成ツールを作ってみましょう。

まずは、そのまま表示。
改行を削除した後、sayで改行付きprintします。

takk@deb9:~/tmp$ cat base | perl -nE'chomp; say $_'

結果です。

./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm
./gmp-6.1.2+dfsg/tune/set_strs.c
./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm
./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c
./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h
./gmp-6.1.2+dfsg/mpn/lisp
./gmp-6.1.2+dfsg/mpf/out_str.c
./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h
./gmp-6.1.2+dfsg/mpz/aorsmul.c
./gmp-6.1.2+dfsg/cxx/osmpz.cc
takk@deb9:~/tmp$

次に、元の行を2列にして表示します。

takk@deb9:~/tmp$ cat base | perl -nE'chomp;$n=$_;say"$n $n"'

結果。

./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm ./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm
./gmp-6.1.2+dfsg/tune/set_strs.c ./gmp-6.1.2+dfsg/tune/set_strs.c
./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm ./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm
./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c ./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c
./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h ./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h
./gmp-6.1.2+dfsg/mpn/lisp ./gmp-6.1.2+dfsg/mpn/lisp
./gmp-6.1.2+dfsg/mpf/out_str.c ./gmp-6.1.2+dfsg/mpf/out_str.c
./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h ./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h
./gmp-6.1.2+dfsg/mpz/aorsmul.c ./gmp-6.1.2+dfsg/mpz/aorsmul.c
./gmp-6.1.2+dfsg/cxx/osmpz.cc ./gmp-6.1.2+dfsg/cxx/osmpz.cc
takk@deb9:~/tmp$

次は、$nは新ファイル名、$1はパス名、$_は、元のファイル名というように役割を決めます。そして3個並べる。

takk@deb9:~/tmp$ cat base | perl -nE'chomp;$n=$_;/^(.*\/)/;say"$_ $1 $n"'

結果。

./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm ./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm ./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm
./gmp-6.1.2+dfsg/tune/set_strs.c ./gmp-6.1.2+dfsg/tune/set_strs.c ./gmp-6.1.2+dfsg/tune/set_strs.c
./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm ./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm ./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm
./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c ./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c ./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c
./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h ./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h ./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h
./gmp-6.1.2+dfsg/mpn/lisp ./gmp-6.1.2+dfsg/mpn/lisp ./gmp-6.1.2+dfsg/mpn/lisp
./gmp-6.1.2+dfsg/mpf/out_str.c ./gmp-6.1.2+dfsg/mpf/out_str.c ./gmp-6.1.2+dfsg/mpf/out_str.c
./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h ./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h ./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h
./gmp-6.1.2+dfsg/mpz/aorsmul.c ./gmp-6.1.2+dfsg/mpz/aorsmul.c ./gmp-6.1.2+dfsg/mpz/aorsmul.c
./gmp-6.1.2+dfsg/cxx/osmpz.cc ./gmp-6.1.2+dfsg/cxx/osmpz.cc ./gmp-6.1.2+dfsg/cxx/osmpz.cc
takk@deb9:~/tmp$

最後に形を整えて出来上がり。1行の生成ツールができました。

takk@deb9:~/tmp$ cat base | perl -nE'chomp;$n=$_;$n=~s/\//_/g;$n=~s/^.//;/^(.*\/)/;say"mv $_ $1$n"'

結果です。

mv ./gmp-6.1.2+dfsg/mpn/x86_64/aors_n.asm ./gmp-6.1.2+dfsg/mpn/x86_64/_gmp-6.1.2+dfsg_mpn_x86_64_aors_n.asm
mv ./gmp-6.1.2+dfsg/tune/set_strs.c ./gmp-6.1.2+dfsg/tune/_gmp-6.1.2+dfsg_tune_set_strs.c
mv ./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/sqr_diagonal.asm ./gmp-6.1.2+dfsg/mpn/sparc32/ultrasparct1/_gmp-6.1.2+dfsg_mpn_sparc32_ultrasparct1_sqr_diagonal.asm
mv ./gmp-6.1.2+dfsg/mpn/x86/fat/mod_1.c ./gmp-6.1.2+dfsg/mpn/x86/fat/_gmp-6.1.2+dfsg_mpn_x86_fat_mod_1.c
mv ./gmp-6.1.2+dfsg/mini-gmp/mini-gmp.h ./gmp-6.1.2+dfsg/mini-gmp/_gmp-6.1.2+dfsg_mini-gmp_mini-gmp.h
mv ./gmp-6.1.2+dfsg/mpn/lisp ./gmp-6.1.2+dfsg/mpn/_gmp-6.1.2+dfsg_mpn_lisp
mv ./gmp-6.1.2+dfsg/mpf/out_str.c ./gmp-6.1.2+dfsg/mpf/_gmp-6.1.2+dfsg_mpf_out_str.c
mv ./gmp-6.1.2+dfsg/mpn/x86/k7/gmp-mparam.h ./gmp-6.1.2+dfsg/mpn/x86/k7/_gmp-6.1.2+dfsg_mpn_x86_k7_gmp-mparam.h
mv ./gmp-6.1.2+dfsg/mpz/aorsmul.c ./gmp-6.1.2+dfsg/mpz/_gmp-6.1.2+dfsg_mpz_aorsmul.c
mv ./gmp-6.1.2+dfsg/cxx/osmpz.cc ./gmp-6.1.2+dfsg/cxx/_gmp-6.1.2+dfsg_cxx_osmpz.cc
takk@deb9:~/tmp$