例如,我想从Books
目录中打开一本特定的书。
为了找到它我ls | grep -i 'book_i_want'
理想情况下想用命令添加下一个管道,如下所示:
ls | grep -i 'some_book' | gnome-open
但那不起作用。
正确的命令是什么?
答案1
要回答最初的问题,xargs
如果您想使用 STDIN 作为参数启动某些东西,则可以通过管道传输。
ls | ... | xargs gnome-open
或者你可以直接将输出视为参数。这在非常长目录可能会达到参数限制。xargs
几乎肯定会更快。
gnome-open $(ls | ...)
但ls
你不应该解析命令的输出;这两者都是垃圾。
您可以将所有搜索和过滤合并到一个命令中:
find -iname '*book_i_want*' -exec gnome-open {} +
请注意,这将默认递归到子目录(与ls
默认值不同),因此请考虑到这一点或添加-maxdepth 1
到行中。
答案2
如果有效:
ls | grep -i 'book_i_want'
那么,这也将
gnome-open *book_i_want*
要使其不区分大小写:
shopt -s nocaseglob
gnome-open *book_i_want*
事实上,上述两种方法都比使用效果更好,ls
因为它们可以处理任何文件名,包括那些带有空格和奇怪字符的文件名,而这些文件名则ls
不能。