Macで特定の拡張子を含むフォルダを一度だけリストアップする方法

Macのターミナルで特定の拡張子(.mkvなど)を含むフォルダを重複なしでリストアップする方法を初心者向けに解説。BSD対応コマンドも紹介。

完了
開始日
2025年8月18日
終了日
2025年8月18日
期間
1日間
最終更新日
2025年8月18日
タグ

Macを使っていて、「特定の拡張子(たとえば .mkv)のファイルが入っているフォルダだけを一覧で取得したい!」と思ったことはありませんか?

UNIX系シェルでは、find コマンドを使って簡単に実現できます。ただし、macOSとLinuxでは微妙にコマンドの仕様が異なるため、macOS向けの正しい書き方も含めて解説します。


✅ やりたいこと:

.mkv ファイルが含まれているフォルダ名を、重複なしで一度だけリストアップしたい!


🔧 基本のコマンド(Linux / GNU find対応)

find . -type f -name "*.mkv" -printf '%h\n' | sort -u

コマンドの意味

部分説明
find .カレントディレクトリ(.)以下を検索
-type fファイルのみを対象にする(ディレクトリは除外)
-name "*.mkv"拡張子が .mkv のファイルを探す
-printf '%h\n'ヒットしたファイルの親ディレクトリ(フォルダ)を出力
sort -u結果を並び替え、重複を除去(=ユニークなリスト)

🔸このコマンドは GNU find(Linuxなど)用 です。macOSの find では -printf が使えません。


🍎 macOSユーザー向け:BSD findの正しい書き方

macOSで同じことをしたい場合は、-printf の代わりに -exec dirname {} \; を使います。

find . -type f -name "*.mkv" -exec dirname {} \; | sort -u

補足

  • -exec dirname {} \;:見つかった .mkv ファイルそれぞれに対して dirname コマンドを実行し、親フォルダ名を取得。
  • sort -u:重複を省いて一意なフォルダだけをリストアップ。

▶ 実行結果の例

./Movies
./Downloads/Anime
./ExternalDrive/Series

このように、.mkv ファイルが入っているフォルダを一覧表示することができます。


🧠 フォルダ名だけを表示したい場合(パスなし)

上記のコマンドはフルパスや相対パスで表示されますが、フォルダ名だけ(最後の部分だけ)を表示したい場合xargsbasename を組み合わせましょう。

find . -type f -name "*.mkv" -exec dirname {} \; | sort -u | xargs -n1 basename

結果の例:

Movies
Anime
Series

🔸パスを含めず、純粋なフォルダ名だけが欲しいときにおすすめです。


🎯 まとめ:必要に応じて使い分けよう!

欲しい表示形式使用コマンド
相対パス or フルパスでのフォルダ一覧`find . -type f -name “*.mkv” -exec dirname {} ;sort -u`
フォルダ名だけを一覧表示`find . …sort -uxargs -n1 basename`

📌 補足:Linuxで -printf が使えるなら…

もしLinuxやHomebrewでGNU findを導入しているMacなら、-printf '%h\n' を使うことで処理が少し高速になることがあります。


💡豆知識:find コマンドをもっと便利に使うには?

  • 拡張子を .mp4.avi に変えれば、他の動画形式でも検索OK
  • 複数の拡張子を検索する場合は -o(または)を使って工夫が必要です(例:-name "*.mkv" -o -name "*.mp4"
  • 深い階層まで探しに行くので、対象ディレクトリが広いときは時間がかかることもあります

このように、Macでもターミナルを使えばファイル整理や検索がとても効率よくできます。 ターミナルにまだ慣れていない方も、ぜひチャレンジしてみてくださいね!