音楽トラックを含むフォルダがありますが、Music
整理がうまくいきません。したがって、特定のトラックを見つけるには、通常、次のように入力します。ファイル名に含まれると予想される特定のキーワードはls Music | grep <keyword>
どこにありますか?<keyword>
次に、コマンドラインで私が探しているファイル名を返し、<name>
音楽ファイルを開くにはvlc <name> &
。
私の質問は、これらすべてを単一の作業に単純化することは可能ですか?を試してみls Music | grep <keyword> | vlc
ましたが失敗しました。どうすればいいですか?
(より一般的には、この目的のためにパイプをどのように使用しますか?)
答え1
xargs
この目的に使用できます。標準入力にパイプされた内容を取得し、サブコマンドの引数として使用します。したがって、あなたの場合は、次のように見えることがあります。
ls Music | grep <keyword> | xargs vlc &
このコマンドシーケンス、特にスペースにはいくつかの問題がまだある可能性があります。デフォルトでは、入力はスペースに分割されているため、名前がファイルのxargs
場合、5つの別々の引数が、、、、、Artist Name - Track Name.mp3
で送信されます。xargs
幸いなことに、この問題を解決する方法があります。オプションを使用すると、入力は null を使用するサブコマンドの引数に分割されます。このコマンドは、空の区切り文字に一致するファイル名の作成をサポートしていることがわかりました(他のものよりもファイルを見つけるのに優れたツールです)。vlc
Artist
Name
-
Track
Name.mp3
-0
xargs
\0
find
find
ls | grep
したがって、これはより良いパイプラインになります。
find Music -iname '*<keyword>*' -print0 | xargs -0 vlc &
答え2
xargsの使い方を学ぶのは便利ですが、ここでは特別なこの場合、1つのグローブのみを使用することをお勧めします。
vlc Music/*keyword* & ## will find all filenames containing the string 'keyword'
再帰したい場合(サブディレクトリの検索など)、globstarシェルオプションを使用できます。
shopt -s globstar
vlc Music/**/*keyword* &