こんにちは。きんくまです。
ファイルがたくさんあって、ファイル名に文字列を追加したり、置換したくなるときがときどきあります。
例)
foo.txt -> foo_140320.txt
foo.txt -> abc_foo.txt
てな感じに日付をつけたり、接頭子をつけたりしたいです。
それをなんとか簡単にしたいなと思ってシェルスクリプト書いてみました。
ネットでいろいろと検索しつつ作りました。
※自己責任でお使いください。(ファイル名の置換なので大事なものはバックアップとっておくと良いと思います)
renamefiles >> ファイルをダウンロード
スクリプトの中身です。
#!/bin/sh # Author: KinkumaDesign # http://www.kuma-de.com echo "¥n////////////////////////////¥n" echo " RENAME FILES SCRIPT" echo "¥n////////////////////////////¥n" echo "¥nselect mode¥n" echo "1: Add string BEFORE filename¥t(ex. foo.txt => bar_foo.txt )" echo "2: Add string AFTER filename ¥t(ex. foo.txt => foo_bar.txt )" echo "3: Replace filename ¥t(ex. foo.txt => bar.txt )¥n" read MODE if [ $MODE = "1" ] ; then echo "¥nmode 1: Add string BEFORE filename" echo "¥ninput argments¥n¥nfiles text¥nex) *.txt bar_¥n" read SELECTOR ADDEDTEXT for f in $SELECTOR; do NEWFN=`echo $f|sed -e "s/^/${ADDEDTEXT}/"`; echo "$f ¥t-> ${NEWFN}"; mv "$f" "${NEWFN}"; done echo "¥nrename completed!!¥n" elif [ $MODE = "2" ] ; then echo "¥nmode 2: Add string AFTER filename" echo "¥ninput argments¥n¥nfiles text¥nex) *.txt _bar¥n" read SELECTOR ADDEDTEXT for f in $SELECTOR; do NEWFN=`echo $f | sed -e "s/¥(¥.[^.]*$¥)/${ADDEDTEXT}¥1/"`; echo "$f ¥t-> ${NEWFN}" mv "$f" "${NEWFN}"; done echo "¥nrename completed!!¥n" elif [ $MODE = "3" ] ; then echo "mode 3: Replace filename" echo "¥ninput argments¥n¥nfiles find replace¥nex) *.txt foo bar¥n" read SELECTOR FINDTXT REPLACETXT for f in $SELECTOR; do NEWFN=`echo $f | sed -e "s/${FINDTXT}/${REPLACETXT}/g"`; echo "$f ¥t-> ${NEWFN}" mv "$f" "${NEWFN}"; done echo "¥nrename completed!!¥n" else echo "mode is not found. exit" exit 1 fi exit 0
使い方
まず実行権をつけます。