Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

特定のフォルダ以下で拡張子がmp3のファイルだけ残したい

スポンサードリンク

f:id:fa11enprince:20200626231955j:plain
大掃除がてら音楽を整理していたら、
10年くらい前に持っているCDをmp3化したファイルがあって
歌詞が載っているリンクやhtmlのファイルが
ご丁寧に一緒に入っていました(;´・ω・)
htmlファイルとかどうでもいいからmp3ファイルだけ残したい。
しかし、まともに消していたら日が暮れる……
ということで、Windowsの場合Explorerから検索して消すっていう手もあるのですが、
あまり効率のいいやり方ではありません。

コマンドラインでやる方法を紹介します。
cdで対象のmp3以外を消したい一番上のディレクトリに移動しておきます。
その直下を再帰的にmp3以外のファイルを消しに行くコマンドです。

Unix系(Linux, Cygwinなど)、またはMac

消すファイルの確認

find . -not -iname "*.mp3" -type f

これで消そうとする対象のファイルをピックアップできます。
良さそうであれば消しにかかります。

削除実行

find . -not -iname "*.mp3" -type f -delete

これで消えてくれます。LinuxとMacはこれでいいのですが、
問題はWindowsです。Cygwinを入れている酔狂な人はそんなにいないでしょうから。

コマンドプロンプトの場合

無理!
むりやりバッチファイルでも作らない限り……

PowerShellの場合(Windows 7以降なら標準搭載)

消すファイルの確認

Get-ChildItem -Recurse -Exclude "*.mp3" | Where-Object { Test-Path $_ -PathType Leaf } | Remove-Item -WhatIf

削除実行

Get-ChildItem -Recurse -Exclude "*.mp3" | Where-Object { Test-Path $_ -PathType Leaf } | Remove-Item

PowerShellは長ったらしいですね。一応Get-ChildItemはls、Remove-Itemはrmに書き換えられますが……
にしても長い。ちなみにWhere-Object { Test-Path $_ -PathType Leaf }
ファイルだけっていう絞込みをしています。もっとスマートな方法がないものか……

しつこいようですが、ちゃんと目的のディレクトリにcdできたことを確かめて実行してくださいね!
でないと大事故になりますので(;^ω^)