カテゴリ: Linuxコマンド集 更新日: 2025/12/31

dirname --multipleオプション|複数のパスをまとめて処理する方法

dirname --multipleオプション|複数のパスをまとめて処理する方法
dirname --multipleオプション|複数のパスをまとめて処理する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、たくさんのファイルの場所(パス)から、フォルダ名だけを一気に取り出す方法ってありますか?」

先生

「それならdirnameコマンドの--multipleオプションを使うのが便利ですよ。」

生徒

「--multipleって何をしてくれるんですか?」

先生

「複数のパスを一度に処理して、それぞれのディレクトリ部分だけを一覧で表示してくれるんですよ。」

1. dirnameコマンドの--multipleオプションとは?

1. dirnameコマンドの--multipleオプションとは?
1. dirnameコマンドの--multipleオプションとは?

dirnameコマンドの--multipleオプションは、Linuxで複数のパス(ファイルやディレクトリの場所)を一括で処理するときに使います。通常のdirnameは1つのパスしか処理できませんが、--multipleを使えば、複数の入力に対してそれぞれのディレクトリ部分を一行ずつ出力してくれます。

この機能を使うことで、大量のファイルパスから一括でフォルダ名だけを取り出すことができるため、スクリプト処理やログ解析、ファイル整理などにとても役立ちます。

2. 基本的な使い方の例

2. 基本的な使い方の例
2. 基本的な使い方の例

まずは、複数のパスをまとめて入力するために、改行された文字列(パス一覧)をdirname --multipleに渡してみましょう。


dirname --multiple
/home/user/docs/file.txt
/home/user/images/pic.jpg
/home/user/music/song.mp3
(Enterで実行)
/home/user/docs
/home/user/images
/home/user/music

このように、標準入力(キーボードなど)から複数のパスを入力し、それぞれのディレクトリ部分が1行ずつ表示されます。

3. echoと組み合わせて使う

3. echoと組み合わせて使う
3. echoと組み合わせて使う

手動で打つより、スクリプトなどで扱う場合は、echoコマンドと改行コードを使って組み合わせるのが便利です。


echo -e "/a/b/c/file1.txt\n/x/y/z/file2.log" | dirname --multiple
/a/b/c
/x/y/z

この方法では、スクリプトや処理の中でファイルリストを事前に準備しておき、効率よくディレクトリ名だけを取り出すことができます。

4. xargsとの組み合わせ

4. xargsとの組み合わせ
4. xargsとの組み合わせ

Linuxのコマンドでは、xargsと組み合わせるとさらに柔軟に使えます。例えば、findコマンドで見つけた複数のファイルのディレクトリを一括抽出するには、次のように書きます。


find . -name "*.log" | dirname --multiple
./logs
./var/log
./tmp

このように--multipleを使うことで、1つずつdirnameに渡す必要がなくなり、処理がとても簡単になります。

5. --zeroと--multipleの組み合わせ

5. --zeroと--multipleの組み合わせ
5. --zeroと--multipleの組み合わせ

もし、ファイル名の中にスペース(空白)が含まれている場合は、--zeroオプションと一緒に使うことで、より安全に処理ができます。

--zeroは、パスの区切りに改行ではなく「ヌル文字(\0)」を使うため、特殊な名前のファイルでも正確に認識できます。


find . -name "*.mp4" -print0 | dirname --zero --multiple
./videos
./videos/movie
./backup

このように、複数ファイルの処理+安全性を両立したいときに便利です。

6. dirname --multipleの注意点

6. dirname --multipleの注意点
6. dirname --multipleの注意点

Linux環境によっては、古いバージョンのdirnameでは--multipleオプションが使えない場合があります。そのときは、以下のようにxargsと組み合わせる方法で代用しましょう。


echo -e "/a/b/file1\n/c/d/file2" | xargs -n1 dirname
/a/b
/c/d

この方法も同様に複数パスを一括処理できますが、ファイル名にスペースがあると誤動作する可能性があるため注意しましょう。

7. basenameとの違いも理解しよう

7. basenameとの違いも理解しよう
7. basenameとの違いも理解しよう

dirnameが「フォルダ部分」を取り出すのに対して、basenameは「ファイル名部分」だけを取り出します。両者を使い分けることで、パスの加工処理がとても楽になります。


basename /home/user/test.log
test.log

dirnamebasenameを組み合わせて処理するスクリプトを書くときは、それぞれの役割をきちんと理解しておきましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
テキスト・データ処理
grep -hオプションの使い方|ファイル名を表示せずに一致行だけを出力する方法
New2
ファイル・ディレクトリ操作
find -mindepthオプションの使い方を完全ガイド!検索の最小深さを指定して効率よくファイル検索
New3
ファイル・ディレクトリ操作
Linuxのlsコマンド-iオプション完全ガイド!初心者でもわかるi-node番号の表示方法
New4
ファイル・ディレクトリ操作
stat --dereferenceオプションの使い方を解説|-Lと同じようにシンボリックリンク先の情報を表示しよう
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
テキスト・データ処理
grepコマンドとは?Linuxで文字列を検索する基本をやさしく解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
statコマンドとは?Linuxでファイルやディレクトリの詳細情報を確認する基本