终端命令 ls

终端命令 ls

一个有趣的观察。

无论您使用 l、ls、ll、ls -a 还是 ls -l,该命令都会递归,如果您碰巧尝试解决链接错误,您最终会浏览大量不必要的垃圾页面来搜索您实际需要的内容。如果您搜索的链接(如我的情况)是文件夹,则尤其如此。

我想修复一个通常通过 python3 访问的 python3.6 链接(正常安装时)。ll pyth* 过去只列出所有已设置的链接,我可以仔细查看列表并根据需要进行修复。但是,现在,它列出了

python3:
...dist 包

python3.6
...
python3.6
的完整列表

ETC...

并且在两种情况下都没有提及链接。

全新安装 18.10,有什么想法吗?

答案1

您获得的输出是因为您正在使用 shell 模式匹配(globbing)并对glob 输出的每个元素pyth*运行命令。ls

shell 首先返回python3python3.6目录以及任何其他匹配项。它们用作参数,ls因此您的命令最终为

ls python3 python3.6 ...

它的输出显示了您不感兴趣的细节。请注意,它不是真正的递归,否则您将看到子目录的内容。

有几种方法可以解决这个问题,例如@steeldriver在评论中提到使用-d--directory只会提供目录名称而不是内容:

ls -d pyth*

或者,您可以使用find命令-maxdepth 1来确保它不会进入子目录。请注意,参数被引用,以便由而不是由 shell-name展开。find

find . -maxdepth 1 -name 'pyth*'

通常最好使用它findls不是依赖命令的输出进行进一步处理,因为ls在某些情况下可能会产生意外的结果。

相关内容