1. ホーム
  2. shell

[解決済み] xargsがスペースを含むファイル名を扱えるようにする

2022-03-17 19:10:47

質問

$ ls *mp3 | xargs mplayer  

Playing Lemon.  
File not found: 'Lemon'  
Playing Tree.mp3.  
File not found: 'Tree.mp3'  

Exiting... (End of file)  

私のコマンドは、ファイル "Lemon Tree.mp3" がスペースを含んでいるため、xargs がそれを2つのファイルだと勘違いして失敗します。このようなファイル名でfind + xargsを動作させることはできますか?

解決方法は?

その xargs コマンドは、空白文字(タブ、スペース、改行)を区切り文字として使用します。

改行文字('˶'ᴗ'˶)のみに絞ることができます。 -d のようなオプションがあります。

ls *.mp3 | xargs -d '\n' mplayer

GNU xargsでのみ動作します。

MacOSの場合。

ls *.mp3 | tr \\n \\0 | xargs -0 mplayer

より単純で実用的な方法(ファイル名をさらに処理する必要がない場合)。

mplayer *.mp3