对于给定目录,请求是打印文件和目录的完整路径
例如对于
/a/b/c/
file1
file2
dir1/
该命令应显示
/a/b/c/file1
/a/b/c/file2
/a/b/c/dir1
它的形式是
ls -<something> .
或者
ls -<something> /a/b/c
我认为这将是微不足道的,但没有发现它已经仔细阅读了所有的ls
开关。我错过了 - 还是应该find
使用其他类似的东西?
find
几乎可以默认为您提供所需的格式。必须使用以您提供的路径开头的路径名,因此请提供/a/b/c
:这相当于
这里有两个问题:
/a/b/c
也会被打印出来。find
递归工作。目前尚不清楚dir1
您的示例中是否为空或其内容是否被省略。您可能需要也可能不需要递归。如果您支持它们
-mindepth 1
,则可以分别解决该问题:-maxdepth 1
find
POSIX 不需要这些选项。使用 POSIX ,您可以使用;
find
来抑制打印。您可以通过以下方式“模拟” :将 POSIX 查找限制到特定深度?/a/b/c
! -path /a/b/c
-maxdepth 1
这是一个 POSIX 解决方案:
鞋底
/a/b/c
不会通过! -path
测试。任何通过的东西都将被修剪,因此该工具不会下降得更深。提供起始路径为
/a/b/c/
(注意尾部斜杠)需要您使用! -path /a/b/c/
(也带有尾部斜杠),因为find
必须完全按照提供的方式引用其起始路径。/a/b/c/
不匹配/a/b/c
,反之亦然。记住-path
将参数视为模式,如果您的起始路径包含模式匹配表示法*
中使用的文字或其他字符,这一点很重要,这一点很重要。您请求了特定的格式,所以也许您想解析输出。在这种情况下
find
是你的工具,ls
绝对不是,因为你不应该解析ls
. 如果您find
是 GNU ,find
请检查UNUSUAL FILENAMES
.man 1 find
考虑-print0
。在评论中,您获得了此问题的链接。许多解决方案需要提供一些工具的路径(比如
readlink
)。如果原始路径来自ls
,这已经是一种“解析ls
”行为——不推荐。但是,在您的情况下,来自其他问题的工具可能有助于将相对路径转换
./c
为c
类似/a/b/c
. 然后,您提供find
.