【问题标题】:Unix ls command: show full path when using optionsUnix ls 命令:使用选项时显示完整路径
【发布时间】:2011-04-07 12:14:04
【问题描述】:

我经常在 Unix (AIX / KSH) 中使用这个 list 命令:

ls -Artl

文件显示如下:

-rw-r--r-- 1 myuser mygroup 0 Apr 2 11:59 test1.txt
-rw-r--r-- 1 myuser mygroup 0 Apr 2 11:59 test2.txt

我想修改命令以显示文件的完整路径。例如:

-rw-r--r-- 1 myuser mygroup 0 Apr 2 11:59 /usr/test1.txt
-rw-r--r-- 1 myuser mygroup 0 Apr 2 11:59 /usr/test2.txt

有什么想法吗?

我发现了几种使用 pwdfind 的解决方法,但是 - 据我所知 - 如果我想保留 ls 选项,这不起作用。

【问题讨论】:

    标签: shell unix command-line ls


    【解决方案1】:

    我使用这个命令:

    ls -1 | xargs readlink -f
    

    【讨论】:

    • 根据你的文件名可能需要做ls -Q1 | xargs readlink -f 但这对我很有用。
    • 这是一个很好的解决方案,但与简单的readlink -f 有什么区别?
    • 您必须在您的机器上将 xargs 别名为“xargs -L 1”。否则这不适用于多个文件。命令,在这种情况下是\ls -1 | xargs -L 1 readlink -f
    • 这是真正显示完整路径(绝对路径)的唯一答案
    • 在 macOS 上,使用自制软件包 coreutils(可能已经安装),它将安装 greadlink
    【解决方案2】:

    这个技巧怎么样...

    ls -lrt -d -1 $PWD/{*,.*}
    
    OR
    
    ls -lrt -d -1 $PWD/*
    

    我认为这对空目录有问题,但如果另一张海报有调整,我会更新我的答案。此外,您可能已经知道这一点,但考虑到它的冗长,这可能是一个很好的别名候选者。

    [update] 添加了一些基于 cmets 的调整,谢谢大家。

    [update] 正如 cmets 所指出的,您可能需要根据 shell(bash 与 zsh)调整匹配器表达式。我重新添加了旧命令以供参考。

    【讨论】:

    • 更新后,该命令对我不再起作用。留言cannot access /mydir/mysubdir/{*,.*}: No such file or directory
    • .* 似乎在 bash 上匹配 ...,但在 zsh 上不匹配。 (ls -A 没有显示它们,所以我之前的建议只能在 zsh 上完全有效,即使这样我的 .zshrc 也可能与它有关)
    • 还有一件事:ls -lrt -d -1 $PWD/{*,.[^.]*} 不会在 sh 中显示 ...,但在 zsh 中会显示点文件两次。那里$PWD/* 似乎就足够了。
    • 另一个挑战:你不能使用通配符过滤器,对吧?如果我想查看带有完整路径的ls -Artl *.log 怎么办?
    • 可以封装在一个改变 $PWD/* 部分的小 shell 脚本中。但这可能是一个不同的问题。
    【解决方案3】:

    使用这个命令:

    ls -ltr /mig/mthome/09/log/*
    

    代替:

    ls -ltr /mig/mthome/09/log
    

    获取列表中的完整路径。

    【讨论】:

    • 我更喜欢这个解决方案,因为它简单易用。我想如果您从中创建一个别名,其他解决方案可能是可用的,但实际上,没有人会费心输入所有内容。
    • 不显示完整路径,在任何地方尝试ls -ltr . |more,只显示文件名,不显示绝对路径。
    • 我也喜欢这个解决方案,因为 SO 上的大多数其他解决方案都假定 PO 想要 ls $PWD.. 关键是在目标目录中列出 * 而不是单独的目录。 @PeterKrauss 重点不是在 -ltr 上,而是在 glob * 上。使用您的示例,它需要是 ls -ltr *|more.
    【解决方案4】:

    从 spacedrop 答案优化...

    ls $(pwd)/*
    

    你可以使用 ls 选项

    ls -alrt $(pwd)/*
    

    【讨论】:

    • 反引号 ```` 现在不鼓励使用,新的命令替换方法是使用 $()
    • @Kiwy 好!这样做我们得到了 Andrew White 的答案(我同意这非常好)
    【解决方案5】:

    只需使用查找工具。

    找到绝对路径

    在我的 Linux 机器上显示完整路径,而

    找到相对路径

    不会。

    【讨论】:

    • 谢谢,这对我有用。我用find "/media/lubuntu/mount point/folder/"。我使用find "/media/lubuntu/mount point/folder/" | grep "pattern" 来查找我想要的文件。每当我按照其他用户的建议使用 $PWD/* 方法时,它都会给我错误。
    【解决方案6】:

    试试这个,对我有用:ls -d /a/b/c/*

    【讨论】:

    • 但不显示完整路径,在任何地方尝试ls -d .|more,只显示.
    【解决方案7】:

    我编写了一个名为 fullpath 的 shell 脚本,其中包含此代码,每天都在使用它:

        #!/bin/sh
        for i in $* ; do
            echo $(pwd)/$i
        done
    

    将它放在 PATH 中的某个位置,并使其可执行(chmod 755 fullpath)然后只需使用
    fullpath file_or_directory

    【讨论】:

      【解决方案8】:

      您可以结合使用 find 命令和 ls 命令。使用路径 (.) 和选择器 (*) 来缩小您要查找的文件的范围。用反引号将 find 命令括起来。 -name 的参数是 doublequote star doublequote,以防您看不懂。

      ls -lart `find . -type f -name "*" `
      

      【讨论】:

        猜你喜欢
        • 2015-02-05
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        相关资源
        最近更新 更多