level0
以下是以树状格式显示的目录内容示例。但是,假设它很大并且包含许多文件,因此我在这里省略了许多文件:
$ tree level0
level0
└── level1
└── level2
└── sample.txt
我尝试使用grep
grep 检查一些文件,但这是我收到的输出:
$ tree /tmp/level0 | grep sample
└── sample.txt
不过,我希望输出是实际的绝对路径/tmp/level0/level1/level2/sample.txt
。
如何使用命令获取目录深处的文件的绝对路径?
我会做什么:
如果您想要潜在符号链接的真实路径:
在 Bash 中设置
globstar
shell 选项可以启用**
通配符。其工作原理与 类似*
,但匹配路径名中的斜杠。因此,它允许进行递归搜索。这有助于创建一个匹配路径名的数组:
还设置
dotglob
shell 选项以允许匹配隐藏名称和具有隐藏名称的目录,以及nullglob
或failglob
取决于您想要如何处理不匹配的模式。设置nullglob
将使不匹配的模式扩展为零,并且设置failglob
将使不匹配的模式导致“不匹配”错误(脚本将被终止)。不使用这两个 shell 选项中的任何一个都将使 shell 保持未扩展的模式不变。您可以使用
"sample.txt"
或"*sample*"
仅获取路径:
find /tmp/level0 -type f -name "sample.txt" -exec dirname {} \;
和
tree
:tree -fi /tmp/level0 | grep "sample.txt" | xargs dirname
路径和文件名:
find /tmp/level0 -type f -name "sample.txt"
和
tree
:tree -fi /tmp/level0 | grep "sample.txt"