New*_*ewb 0 command-line shell bash terminal files
我有一个Music文件夹,里面有一些音乐曲目,但组织得不太好。因此,如果我想找到一个特定的曲目,我通常会输入:ls Music | grep <keyword>,<keyword>我希望文件名有一些关键字在哪里。然后我的命令行将返回我正在查找的文件的名称<name>,然后打开音乐文件,我将输入vlc <name> &.
我的问题是是否有可能将所有这些简化为一个操作?我尝试使用ls Music | grep <keyword> | vlc,但没有成功。我该怎么做呢?
(更一般地说,我将如何将管道用于这种目的?)
onl*_*one 10
您可以xargs为此使用。它将接收通过标准输入输入的内容并将其用作子命令的参数。因此,在您的情况下,它可能如下所示:
ls Music | grep <keyword> | xargs vlc &
Run Code Online (Sandbox Code Playgroud)
现在,这个命令序列可能仍然存在一些问题,特别是空格。默认情况下,xargs将在任何空白处拆分其输入,因此如果您有一个名为 like 的文件Artist Name - Track Name.mp3,则将xargs向vlc: Artist, Name, -, Track,发送 5 个单独的参数Name.mp3。幸运的是,有办法解决这个问题。如果您使用-0选项 to xargs,它将使用 null\0将其输入拆分为子命令的参数。事实证明,该find命令支持用空分隔符写出匹配的文件名(并且find是比ls | grep任何方法都更好的查找文件的工具)。
所以这可能是一个更好的管道:
find Music -iname '*<keyword>*' -print0 | xargs -0 vlc &
Run Code Online (Sandbox Code Playgroud)