对于给定的目录,请求是打印文件和目录的完整路径
例如
/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
使用其他类似的东西?
答案1
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 不要求这些选项。使用 POSIX,find
您可以/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
这一点很重要*
模式匹配符号。
你请求了特定的格式,所以也许你想解析输出。在这种情况下find
是你的工具,但ls
肯定不是,因为你不应该解析输出ls
。如果您的find
是 GNU find
,请检查UNUSUAL FILENAMES
中的部分man 1 find
。考虑-print0
。
在评论中你获得了一个链接这个问题。那里的许多解决方案都需要提供某个工具的路径(如readlink
)。如果原始路径来自ls
,则这已经是“解析”操作ls
——不推荐。
但是,对于您来说,另一个问题中的工具可能有助于将相对路径转换./c
为c
完整路径/a/b/c
。然后提供完整路径find
。