$ 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认为它是两个文件。我能让find + xargs与这样的文件名一起工作吗?
$ 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认为它是两个文件。我能让find + xargs与这样的文件名一起工作吗?
当前回答
在macOS (Monterey/12向前,我不确定10.15/Catalina过去了多久)上,如果你的文件名或子目录中有空格,你可以使用以下命令:
mdfind -0 -onlyin . -name .txt | xargs -0 grep stackoverflow | wc -l
正如珍的回答所示:
xargs实用程序从标准输入中读取空格、制表符、换行符和文件结束符分隔的字符串,并以这些字符串作为参数执行实用程序。
您希望避免使用空格作为分隔符。这可以通过更改xargs的分隔符来实现。根据手册:
-0修改xargs以NUL('' \0 ")字符作为分隔符, 而不是空格和换行。这预计将用于 与find(1)中的-print0函数一致。
其他回答
Ls | grep mp3 | sed -n“7p”| xargs -i mplayer {}
注意,在上面的命令中,xargs将为每个文件重新调用mplayer。这对于mplayer来说可能是不可取的,但是对于其他目标来说可能是可以的。
Try
find . -name \*.mp3 -print0 | xargs -0 mplayer
而不是
ls | grep mp3
find . -name 'Lemon*.mp3' -print0 | xargs -0 -i mplayer '{}'
在我的例子中,这有助于删除带有空格的不同文件。它应该也工作与mplayer。必要的技巧是引用。(在Linux Xubuntu 14.04上测试。)
macOS 10.12版本。x (Sierra),如果你在文件名或子目录中有空格,你可以使用以下方法:
find . -name '*.swift' -exec echo '"{}"' \; |xargs wc -l
xargs实用程序从标准输入中读取空格、制表符、换行符和文件结束符分隔的字符串,并以这些字符串作为参数执行实用程序。
您希望避免使用空格作为分隔符。这可以通过更改xargs的分隔符来实现。根据手册:
-0修改xargs以NUL('' \0 ")字符作为分隔符, 而不是空格和换行。这预计将用于 与find(1)中的-print0函数一致。
如:
find . -name "*.mp3" -print0 | xargs -0 mplayer
回答关于播放第七首mp3的问题;运行起来更简单
mplayer "$(ls *.mp3 | sed -n 7p)"