Windowsのファイル操作にお悩みではありませんか?(広告じゃないよ)
findコマンドのListを参照したい方は色々すっ飛ばして下の方へGO
フォルダ分けされた中に楽曲ファイルなどが存在して取り出すのが面倒くさい
Musicフォルダの中に、AnimeやVOCALOIDなどのフォルダに分けてミュージックデータを入れてませんか??
こうすると、例えばカラオケ音源だけWalkmanに入れたい!って思った時にいろんなフォルダを巡らないとコピーできず、しかも、Windowsの検索が何故か行われなかったり、 検索するフォルダの中に楽曲以外のファイルが入ってるためそれを取り除くのが面倒だったりしますよね。
そこでBashの出番です。
せっかく導入されたのですから使いましょうよ!
検索で
ORとかANDとか使えばヒットして普通にコピーできます。
ただ、今回はコマンドでコピーまで自動なので楽です。
findコマンドを使う
findコマンドをご存知でしょうか。
いろんなファイルをパス情報込みで検索してくれる便利なコマンドです。(他にも使い方は様々)
まずはfindを使って検索をしてみましょう。
$ find
これを実行すると、大量のファイル内ではずっと実行しっぱなしになります。
Ctrl+C終了しましょう。
$ find ./ anime
これでanimeという文字列がどこかに含まれていたら検索でヒットします。
これはフォルダの名前も含みますので、animeフォルダに格納されているファイルをすべて参照します。
今回はファイル名だけほしいのでオプションをつけましょう。
$ find ./ -name anime
どうでしょうか。これはanimeというファイル名の一致したものを表示します。
多分何も出ないと思います。 ここであいまい検索にしましょう。
$ find ./ -name ¥*anime*
*がどの文字でもOKという意味を表します。文字数も指定されていません。とにかくファイル名にanimeという文字が含まれていたらヒットします。ここで、カラオケ音源を検索してみましょう。
$ find ./ -name ¥*inst*
これでカラオケ音源がヒットされますね。
ただ、これだと大文字小文字の区別がされていますので、InstやINSTなどは検索されません。
大文字小文字の区別をなくしてみましょう。
$ find ./ -iname ¥*inst*
inameに変えると大文字小文字の区別がなくなります。
カラオケ音源もinstだけではなくoffvocalなんてのもよく使われますよね。
ではinstまたはoffが含まれていた場合を検索しましょう。
$ find ./ ¥( -iname ¥*inst* -o -iname ¥*off* ¥) -print
これでOR検索が出来ました。
あとはここで検索したファイルをコピーするだけです。
コピーはcpコマンドです。
$ find ./ ¥( -iname ¥*inst* -o -iname ¥*off* ¥) -print -exec cp {} ./{コピー先フォルダ} ¥;
これでコピーが始まります。
楽ですね。
findコマンドまとめ
# どこかに含まれてる文字を検索
$ find ./ anime
anime/music/a.mp3
anime/music/an(inst).mp3
anime/movie/anime(INST).mp4
# ファイル名全件一致
$ find ./ -name anime
anime/music/anime
VOLACOLD/music/anime
# ファイル名部分一致
$ find ./ -name ¥*anime*
anime/music/aanimee.mp3
anime/music/anime(inst).mp3
# ファイル名部分一致&大小文字区別なし
$ find ./ -iname ¥*inst*
anime/music/anime(inst).mp3
anime/music/tarou(INST).mp3
# OR検索
$ find ./ ¥( -iname ¥*inst* -o -iname ¥*off* ¥) -print
anime/music/anime(inst).mp3
anime/music/tarou(INST).mp3
anime/music/animal(off vocal).mp3
anime/music/zirou(Off Vocal).mp3
# 出力をコピー
$ find ./ ¥( -iname ¥*inst* -o -iname ¥*off* ¥) -print -exec cp {} ./{コピー先フォルダ} ¥;
上記のデータがコピーされる。
WindowsだけでなくLinuxでもMacでも使えます。