对于给定的目录,请求是打印文件和目录的完整路径
例如
/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
:
find /a/b/c
相当于
find /a/b/c -print
这里有两个问题:
/a/b/c
也将被打印。find
递归工作。dir1
在您的示例中是否为空还是省略其内容尚不清楚。您可能想要也可能不想递归。如果您支持,可以分别通过-mindepth 1
和解决该问题:-maxdepth 1
find
find /a/b/c -mindepth 1 -maxdepth 1
POSIX不需要这些选项。使用POSIXfind
可以禁止/a/b/c
使用! -path /a/b/c
; 您可以-maxdepth 1
按照以下步骤“模拟” :将POSIX查找限制为特定深度?
这是POSIX解决方案:
find /a/b/c ! -path /a/b/c -prune
鞋底/a/b/c
不会通过! -path
测试。通过的所有内容都将被修剪,因此该工具不会下降得更深。
提供起始路径为/a/b/c/
(请注意末尾斜杠)需要您使用! -path /a/b/c/
(也要有末尾斜杠),因为find
必须严格按照提供的路径引用其起始路径。/a/b/c/
不匹配/a/b/c
,反之亦然。切记-path
将参数作为模式对待,如果您的起始路径包含*
用于Pattern Matching Notation的文字或其他字符,则这一点很重要。
您请求了特定的格式,所以也许您想解析输出。在这种情况下find
,您的工具是您的工具,但ls
绝对不是,因为您不应该解析的输出ls
。如果您find
是GNU find
,请检查中的UNUSUAL FILENAMES
部分man 1 find
。考虑一下-print0
。
在评论中,您得到了此问题的链接。那里的许多解决方案都需要为某些工具(例如readlink
)提供路径。如果原始路径来自ls
,则已经是“解析ls
”操作-不建议这样做。
但是,从另一个问题出发的工具在您的情况下可能有用,可以将相对路径转换为./c
或c
将完整路径转换为/a/b/c
。然后,您提供前往的完整路径find
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句