我刚刚用tree
安装了brew
,当我尝试像这样运行它时(在python项目文件夹上):
tree -I *.pyc
它返回pyc
文件的[error opening dir],例如:
我开始运行ls
:
a.pyc b.pyc
当我运行tree -I *.pyc
时,我得到:
b.pyc [error opening dir]
0 directories, 0 files
任何想法为什么?
答案 0 :(得分:5)
这不是tree
的问题,它是shell(bash)进行文件名扩展 - 也称为globbing。因此,传递到tree
的内容是当前目录中以.pyc
结尾的所有文件名列表。只有第一个文件名将跟随-I
选项(a.pyc
),其他文件名将被视为目录名称。
tree
想要这样做拥有 globbing(find
是相同的)所以你必须通过添加引号来保护它免受shell的攻击:
tree -I '*.pyc'
引号将被shell剥离,tree
不会看到它,它只会看到*.pyc
。
在这种情况下,单引号或双引号都可以解决问题,但可能更安全地坚持使用单引号,因为其他扩展是在双引号内完成的。
顺便说一句,当你遇到这种问题时:set -x
将在bash扩展后显示命令。使用set +x
将其关闭。这些可以在命令行或脚本中用于调试。
答案 1 :(得分:2)
使用引号包围传递给-I
和-P
的通配符模式,以避免出现通信:
tree -I '*.pyc'
来自man tree
:
有效的通配符运算符为
'*'
(任何零个或多个字符)
'?'
(任何单个字符)
'[...]'
(括号中列出的任何单个字符)
答案 2 :(得分:0)
我遇到 pass 实用工具
的问题我创建了一个名为github.com/myaccount之类的密码,并捕获了
[error opening dir]
当我尝试检索密码时
重启后一切正常。