伙计们,我正在尝试运行一个Shell脚本,该脚本会搜索目录,然后检查目录的文件以查看其是否可以找到特定名称。基本的东西。该目录名为labs,位于我的主目录下。文件没有文件扩展名。该脚本需要在我的主目录中运行。我正在尝试打开所有文件并搜索特定名称。这是脚本中导致我麻烦的一行:
ls labs | xargs cat | grep name
然后出现以下错误:
cat: cannot open name_of_file
对于我找到的每个文件。为什么在目录外不起作用,但是当我在里面时就可以了。我该如何运作?我的bash没有open命令。
答案 0 :(得分:4)
查看ls labs
的输出。这是裸文件名的列表-即没有目录前缀的文件名。这样您将得到如下输出:
file1
file2
file3
将其传递给xargs
时,最终会运行以下命令:
cat file1 file2 file3
但是,由于您不在labs
目录中(您在父目录中),因此这些文件名引用的文件不存在。您需要先将CD插入labs
目录:
cd labs; ls | xargs cat | grep name
或使用类似find
的命令返回完整路径:
find labs -type f | xargs cat | grep name