カテゴリ: Linuxコマンド集 更新日: 2026/02/05

basenameの--zeroオプションでヌル文字区切り!xargsと安全に連携するLinuxの基本

basename --zeroオプション|出力をヌル文字で区切る方法(xargsと安全に連携)
basename --zeroオプション|出力をヌル文字で区切る方法(xargsと安全に連携)

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

生徒

「先生、スペースを含むファイル名をxargsで安全に処理するにはどうすればいいんですか?」

先生

「そのときは、basenameコマンドの--zeroオプションを使うと安心です。」

生徒

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

先生

「出力の区切りを“改行”じゃなくて、“ヌル文字”という特殊な区切りに変えることで、ファイル名の空白や改行にも強くなるんですよ。」

1. basenameコマンドと--zeroオプションとは?

1. basenameコマンドと--zeroオプションとは?
1. basenameコマンドと--zeroオプションとは?

basenameは、ファイルのパス(例:/home/user/data/file.txt)からファイル名だけを取り出すLinuxコマンドです。そのbasenameに用意されている--zeroオプションは、出力の区切りをヌル文字(\0)に変えるための機能です。

通常、コマンドの出力は1行ずつ改行(\n)で区切られますが、ファイル名にスペースや改行が含まれていると、誤って分割されてしまう危険があります。--zeroを使えば、その心配がなくなります。

2. 改行とヌル文字の違いとは?

2. 改行とヌル文字の違いとは?
2. 改行とヌル文字の違いとは?

初心者にとって「ヌル文字」と言われてもピンとこないかもしれません。簡単に言うと、「見えない特別な区切り文字」で、通常の改行とは異なります。

改行は1行ずつ見える形で表示されますが、ヌル文字は画面に表示されず、xargs -0のようなコマンドでだけ正しく解釈される仕組みです。これにより、スペースや改行を含むファイル名でも安全に処理できます。

3. --zeroオプションの使い方

3. --zeroオプションの使い方
3. --zeroオプションの使い方

では、実際に使ってみましょう。たとえば、次のようにファイル名を出力します。


basename --zero /home/user/music/summer hits.mp3
summer hits.mp3

この場合、見た目では普通の出力に見えますが、実際には末尾に「ヌル文字」が出力されており、改行はされていません。

このようにヌル文字で出力されることで、次のコマンドに渡すときも安全です。

4. xargs -0との組み合わせで安全に処理

4. xargs -0との組み合わせで安全に処理
4. xargs -0との組み合わせで安全に処理

basename --zeroは、xargs -0と一緒に使うことで、より安全にコマンドの連携ができます。xargsは、標準入力の内容を引数として次のコマンドに渡すツールです。

以下のように使います:


find /path/to/dir -type f -print0 | xargs -0 basename --zero
file1.txtfile2.txtfile3.txt

見た目にはすべてがつながっているように見えますが、内部では各ファイル名の間にヌル文字が入っています。スペースや改行を含むファイル名があっても正しく処理されるのがポイントです。

5. 改行区切りとの違いを体感しよう

5. 改行区切りとの違いを体感しよう
5. 改行区切りとの違いを体感しよう

次のようなファイル名があったとします:

  • report 2023.txt
  • 年末のまとめ.txt
  • hello\nworld.txt(改行が含まれる)

これらを普通のxargsで処理しようとすると、スペースや改行が原因で途中で文字列が切れてしまうことがあります。

しかし--zeroxargs -0を使えば、すべて正しく処理されます。

6. --multipleと--zeroは同時に使える?

6. --multipleと--zeroは同時に使える?
6. --multipleと--zeroは同時に使える?

もちろん、--zero--multipleオプションと一緒に使うことができます。複数のパスを一括で処理して、すべての出力をヌル文字で区切るという使い方です。


basename --multiple --zero /tmp/a.txt /tmp/b.txt /tmp/c.txt
a.txtb.txtc.txt

このとき、各ファイル名の末尾にはヌル文字が入っていて、xargs -0などで正確に処理できます。

7. 応用:拡張子を除外しつつヌル文字出力

7. 応用:拡張子を除外しつつヌル文字出力
7. 応用:拡張子を除外しつつヌル文字出力

--suffixオプションと--zeroを同時に使うこともできます。たとえば、.logを除いたファイル名をヌル区切りで出力したい場合は以下のようにします。


basename --multiple --suffix=.log --zero /var/log/sys.log /var/log/app.log
syssapp

このように、拡張子を削除したうえで、出力がヌル文字でつながるため、パイプで処理する際にも安全性が保たれます。

8. GNU版basenameでのみ使用可能なことに注意

8. GNU版basenameでのみ使用可能なことに注意
8. GNU版basenameでのみ使用可能なことに注意

--zeroオプションは、GNU coreutilsに含まれるbasenameでのみサポートされています。macOSや一部の古いUnix環境では使えない場合もあります。

その場合は、GNU版をインストールするか、find -print0xargs -0のみで処理を工夫する必要があります。

関連記事:
カテゴリの一覧へ
新着記事
New1
テキスト・データ処理
less -Xオプションの使い方を完全ガイド!終了後も画面内容を残す方法
New2
ファイル・ディレクトリ操作
lsコマンドの-lオプションでファイルの詳細情報を一覧表示しよう!初心者でもわかる使い方と意味を徹底解説
New3
ファイル・ディレクトリ操作
cp -pオプションの使い方|元ファイルのパーミッションやタイムスタンプを保持する方法を初心者向けに解説!
New4
ファイル・ディレクトリ操作
find -permオプションの使い方を完全解説!初心者でもできるパーミッション検索
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
lsコマンドの-lオプションでファイルの詳細情報を一覧表示しよう!初心者でもわかる使い方と意味を徹底解説
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
cdコマンドとは?Linuxでディレクトリを移動する基本を初心者向けに解説
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
rmコマンドとは?Linuxでファイルやディレクトリを削除する基本