我刚安装tree
有brew
,当我尝试这样运行了它(在一个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)
有什么想法吗?
这不是问题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
将其关闭.这些可以在命令行或脚本中用于调试.