2

我正在尝试通过 bash 代码将文件名通过管道传输到 eog。

这是我的代码:ls | grep "sample" | head -1其中 sample 是所需文件的名称。

我无法弄清楚如何将输出通过管道传输到 eog。

我尝试将上述代码的输出存储到一个变量中,然后将该变量传递给 eog 失败。

有什么建议么?

4

3 回答 3

3

这是你要找的吗?

ls | grep "sample" | head -1 | xargs eog
于 2013-05-18T18:36:06.667 回答
3

可以说,ls有时解析输出可能会出错(例如,文件名中的空格或换行符),因此您可以尝试下一个:

 find . -iname '*sample*' -exec eog '{}' \; -quit

或限制为当前目录

 find . -maxdepth 1 -iname '*sample*' -exec eog '{}' \; -quit

以上将找到任何包含“样本”的文件(不区分大小写 --name用于区分大小写)并将eog在其上运行 - 并在第一次匹配后退出,因此仅打开第一个文件。

于 2013-05-18T18:42:46.870 回答
1

eog(“侏儒之眼”)不允许您将文件通过管道传输到其中。您必须提供文件名作为命令行参数。

如果只有一个匹配的文件名,您只需键入:

eog *sample*

但这将具有显示当前目录中名称中包含单词的所有文件的效果sample。我不清楚为什么您希望按字母顺序排列的第一个此类文件是要显示的文件,但您可以这样做:

eog $(ls *sample* | head -n1)

不过,您可能更愿意找到更具体的模式。

于 2013-05-18T18:38:44.700 回答