关于 Gnu/Linux 命令行界面(使用 grep、ls 和 cat)的问题

关于 Gnu/Linux 命令行界面(使用 grep、ls 和 cat)的问题

问候堆栈交换,

我的目标:执行ls搜索整个目录结构并grep搜索cats.py.用于cat读取文件cats.py。我知道这听起来像是 Gnu/Linux 的诞生。

我目前对bashStack Exchange 还不熟悉,所以如果格式很糟糕,请原谅我。

我执行以下ls -R -l -t -r | grep cats命令返回以下内容

rw-r--r-- 1 user user 2179 Mar 18 08:53 cats.py

我尝试使用 cat 读取上面返回的文件,但我遇到了如何为 grep 命令的结果分配占位符的问题,这是我尝试过的方法和结果。

ls -R -l -t -r | grep cats | cat cats.py
cat: cats.py: No such file or directory

我相信问题在于我执行 cat 函数的方式,应该类似于:

ls -R -l -t -r | grep cats | cat '{}'

或者

ls -R -l -t -r | grep cats && cat cats.py

答案1

find 命令会更合适:

find . -name 'cats.py' -exec cat {} \;

答案2

使用find命令。它可以找到该文件,并对其运行命令。ls有问题,特别是如果-l给出了该选项,因为这样您的数据比您需要的多得多(文件模式,日期,所有者,...)。

即(替换 «» 中的位)

find «directory» -name '«file-name-glob-pattern»' -exec «command» {} \;

例如

find . -name 'cats.py' -exec cat {} \;

答案3

替代find -exec,使用扩展通配符:

shopt -s extglob
cat **/cats.py

可选:取消设置 extglob 选项:

shopt -u extglob

请注意,这类似于-exec cat {} +而不是-exec cat {} \;

第一个运行:

cat file1 file2 file3

后者运行:

cat file1
cat file2
cat file3

对于此示例,输出是相同的,但第一个运行速度更快。

答案4

这并不漂亮,但似乎符合您的要求。

cat `sudo ls -R -l -t -r | grep cats | awk '{print $9}'`

cat `sudo ls -R -l -t -r | grep `Local\ State` | awk '{print $9}'`

相关内容