2015年1月10日土曜日

ファイル名の括弧()を削除する

windowsでコピーしたファイル名に括弧(1)とか(2)とか勝手に付けられて
邪魔だから一括でリネームして括弧を削除しようかなと思った。
そこで、cygwinでbash使えば簡単にできるのかなとやってみたら結構ハマった・・

強引かもしれないけど次の方法でできた。
この例では元のファイル名のが次の一覧の場合。
$ ls
a (1).txt  a (100).txt  a (2).txt
これをsedを使って置き換える。
ここでは、括弧)と一緒にスペースも同時にアンダースコアに変更する。
いきなりコマンド実行は怖いから、とりあえず変更後のファイル名をecho。
$ IFS=$'\n'; for f in *\(*\)*; do echo $f|sed -e 's/[ ()]/_/g'; done
a__1_.txt
a__100_.txt
a__2_.txt
まず、forで括弧付きファイルだけを対象にしてる。
それと、IFSを改行にしてるのはファイル名にスペースが入っていて、
forで処理するときにスペースで分割されたものが渡されてきたから・・
sedでは文字を置換してるだけ。

リネーム実行と結果表示。
$ IFS=$'\n'; for f in *\(*\)*; do mv "$f" `echo $f|sed -e 's/[ ()]/_/g'`; done

$ ls
a__1_.txt  a__100_.txt  a__2_.txt
以下を参考にした。
http://unix.stackexchange.com/questions/110213/remove-whitespace-and-parentheses-in-filenames-with-sed

0 件のコメント:

コメントを投稿