osx:tree -I命令错误打开目录

eLR*_*uLL 3 macos shell tree

我刚安装treebrew,当我尝试这样运行了它(在一个Python项目文件夹):

tree -I *.pyc
Run Code Online (Sandbox Code Playgroud)

它返回文件的[error opening dir] pyc,例如:

我开始运行ls:

a.pyc b.pyc
Run Code Online (Sandbox Code Playgroud)

当我跑步时tree -I *.pyc,我得到:

b.pyc [error opening dir]

0 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

cda*_*rke 5

这不是问题tree,它是shell(bash)执行文件名扩展 - 也称为globbing.所以传入的tree当前目录中以...结尾的所有文件名的列表.pyc.只有第一个文件名将跟随-I选项(a.pyc),其他文件名将被视为目录名称.

tree想要做它自己的 globbing(find是相同的)所以你必须通过添加引号来保护它免受shell的影响:

tree -I '*.pyc'
Run Code Online (Sandbox Code Playgroud)

引号将被shell剥离,不会被看到tree,它只会看到*.pyc.

在这种情况下,单引号或双引号都可以解决这个问题,但是可能更安全地坚持使用单引号,因为其他扩展是在双引号内完成的.

顺便说一句,当你遇到这种问题时使用:

set -x
Run Code Online (Sandbox Code Playgroud)

这将在bash扩展后显示命令.使用set +x将其关闭.这些可以在命令行或脚本中用于调试.