无法在 bash 中使用 cat 打开目录中的文件

Can't open files in directory using cat in bash

大家好,我正在尝试 运行 一个 shell 脚本,该脚本搜索一个目录,然后检查该目录的文件以查看它是否可以找到特定名称。基本的东西。该目录名为 labs,位于我的主目录下。这些文件没有文件扩展名。该脚本需要位于我的主目录中的 运行。我正在尝试打开所有文件并搜索特定名称。这是脚本中给我带来麻烦的一行:

ls labs | xargs cat | grep name

我收到以下错误:

cat: cannot open name_of_file

对于我找到的每个文件。为什么这在目录外不起作用,但当我在目录内时就可以了。我怎样才能让它发挥作用?我的 bash 没有打开命令。

查看 ls labs 的输出。它是一个裸文件名列表——也就是说,没有目录前缀的文件名。所以你得到如下输出:

file1
file2
file3

当您将其传递给 xargs 时,您最终会得到 运行 如下命令:

cat file1 file2 file3

但是由于您不在 labs 目录中(您在父目录中),这些文件名指的是不存在的文件。您需要先 cd 进入 labs 目录:

cd labs; ls | xargs cat | grep name

或者使用像 find 这样的命令 returns 完整路径:

find labs -type f | xargs cat | grep name