【问题标题】:Convert `ls -lR` output to format of `find` output将 `ls -lR` 输出转换为 `find` 输出的格式
【发布时间】:2011-08-22 15:55:53
【问题描述】:

我需要将ls -lR输出转换为find输出的格式

例如我有一个文本文件,它是ls -lR 的输出。该文件包含:

/tmp/1:
total 0
drwxr-xr-x 3 user1 ubuntu 80 May 10 21:13 2
-rw-r--r-- 1 user1 ubuntu  0 May 10 21:13 f1

/tmp/1/2:
total 0
drwxr-xr-x 2 user1 ubuntu 60 May 10 21:13 3
-rw-r--r-- 1 user1 ubuntu  0 May 10 21:13 f2

/tmp/1/2/3:
total 0
-rw-r--r-- 1 user1 ubuntu 0 May 10 21:13 f3

我想将此文件转换为不同格式的第二个文件,就像find 实用程序默认使用的那样:

/tmp/1
/tmp/1/f1
/tmp/1/2
/tmp/1/2/f2
/tmp/1/2/3
/tmp/1/2/3/f3

如果我有用于生成 ls-lR 的 fs,我将只运行 find /tmp/1,但在我的情况下,我无法访问原始 fs。

有可能吗?此转换必须有一个简短的 perl 脚本。

【问题讨论】:

    标签: find format ls directory-listing


    【解决方案1】:

    您可以使用 -ls 作为主要(与 ls -l 略有不同)或 -exec ls -l {} +。但是,它永远不会与 ls -lR 完全相同,因为它会进行不同的分组并打印总计。

    实际上,我认为find . -type d -exec ls -l {} + 是最接近的近似值。

    【讨论】:

    • 您的答案是“如何从 find 生成 ls -l-like 输出”。感谢您指向-ls 选项。不幸的是,我无法访问生成 ls-lR 并且我的任务是反向的文件系统,我只想将 ls-lR 输出转换为 find 样式的输出。
    • 哦,我明白你的意思了。简而言之:没有。如果您从选项中转储 l,-R 仍然会执行精美的打印分组,这很难从 find 转换为一行输出。
    • 不是很难,可以用....awk或perl转换。但是需要单独的脚本甚至程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多