basenameの--multipleオプションで複数パスを一括処理!初心者にもわかるLinuxコマンド入門
生徒
「basenameって1個ずつしかファイル名を取り出せないんですか?」
先生
「実は、複数のパスをまとめて処理できる--multipleオプションがあるんですよ。」
生徒
「へぇ、それなら一括で処理できて便利ですね!どう使うんですか?」
先生
「それじゃあ、一緒に--multipleの使い方を学んでみましょう。」
1. basenameコマンドとは?
basenameコマンドは、LinuxやUnixで使われる基本的なコマンドのひとつです。ファイルのパス(道筋)からファイル名だけを取り出すことができます。
たとえば、/home/user/image.pngというファイルのパスがあった場合、basenameを使えばimage.pngだけを表示できます。
2. 通常のbasenameの使い方(おさらい)
まずは基本的な使い方を見てみましょう。
basename /home/user/music/song.mp3
song.mp3
このように、ファイル名だけを表示できます。ただし、この方法では1つのファイルパスしか扱えません。
3. --multipleオプションとは?
--multipleは、basenameコマンドに用意された複数のパスを一括で処理するためのオプションです。通常のbasenameでは1つのパスしか指定できませんが、--multipleを使えば、2つ以上のパスをまとめて処理できます。
このオプションは、「毎回1つずつコマンドを打つのが面倒」「複数のファイル名だけを一括で取り出したい」といった場面でとても便利です。
4. --multipleの基本的な使い方
実際の使い方を見てみましょう。
basename --multiple /home/user/photos/cat.jpg /home/user/photos/dog.jpg
cat.jpg
dog.jpg
このように、2つのパスを一度に処理して、それぞれのファイル名だけを出力できます。
5. 拡張子を除外したい場合は?
--multipleを使う場合でも、SUFFIX(接尾辞)を一緒に指定することができます。
basename --multiple --suffix=.jpg /images/a.jpg /images/b.jpg
a
b
このように--suffixオプションを追加することで、拡張子.jpgを除外してファイル名だけを取得できます。
6. 実行結果の順番に注意
--multipleオプションでは、指定したパスの順番どおりに出力されます。ファイル名だけを表示したいときに、順序が大事な場合もあるので注意しましょう。
basename --multiple /data/x.txt /data/y.txt /data/z.txt
x.txt
y.txt
z.txt
このように、指定した順番どおりにファイル名が表示されます。
7. lsコマンドとの組み合わせ例
大量のファイル名を処理したいときは、lsコマンドと組み合わせてxargsを使うことで、さらに便利になります。
ls /var/log/*.log | xargs basename --multiple
syslog.log
auth.log
kernel.log
このように、.logファイルのパス一覧からファイル名だけを取り出す処理が一括でできます。
8. dirnameとの違いを確認しよう
basenameとよく似たコマンドにdirnameがあります。こちらは、ファイル名ではなく、パス(フォルダ部分)だけを取り出すためのコマンドです。
dirname /home/user/data/file.txt
/home/user/data
これに対してbasenameはファイル名だけを出力します。
basename /home/user/data/file.txt
file.txt
それぞれ役割が異なるので、場面に応じて使い分けましょう。
9. basename --multipleが使えない場合の代替方法
環境によっては、古いバージョンのbasenameでは--multipleオプションが使えないことがあります。
その場合は、for文を使って1つずつ処理する方法もあります。
for path in /tmp/a.txt /tmp/b.txt; do basename "$path"; done
a.txt
b.txt
これは少しだけプログラミングっぽい書き方になりますが、複数ファイルを処理する裏技のような使い方です。