find
如果您使用 Zsh,您可能不需要。find
Zsh 通配符可以通过其递归通配符、扩展通配符和通配符限定符完成大部分功能。例如,您find ./test-folder -type f -name '*.txt'
只需./test-folder/**/*.txt(D.)
D
包含隐藏文件以匹配 的find
默认行为。你可能不需要它,. for -type f
。— Stéphane Chazelas,来自 unix.stackexchange
包含test-folder
4 个文件:a.txt
、b.txt
、c.txt
和x.jpg
.
当我执行时./test-folder/**/*.txt(D.)
,它返回
zsh: permission denied: ./test-folder/a.txt
这里是什么permission denied
意思?为什么它找不到b.txt
and c.txt
?
zsh 5.9 (x86_64-apple-darwin23.0)
./test-folder/a.txt
您收到“权限被拒绝”的原因是因为您尝试运行没有执行权限的文件,并且即使有执行权限也可能无法执行。正如注释中所建议的,您需要在其前面放置一个命令来打印或操作文件而不是执行它。至于 zsh glob 相对于运行 find 的优点,它与其他命令结合使用时可以极大地简化需要执行非常简单的文件搜索的命令行。但是,它缺乏 find 命令的灵活性,并且无法修复无法在命令行中容纳所有匹配文件名的情况。
它不会取代 find,它只是一个快捷方式,并且并不意味着像您的示例尝试那样单独使用。
如果您想要的只是一个文件列表,那么使用 zsh glob 或 find 可能会很困难。但如果将它与另一个命令结合使用,对于简单搜索,zsh glob 几乎总是更短。
例如,如果您想查看小目录树中的每个 txt 文件,这可能很有用:
但是,如果您碰巧有一个以此结尾的目录,
.txt
可能会少一些不愉快,所以您可以通过使用来过滤它这肯定比
并没有做完全相同的事情
*.txt(.)
更改以to结尾的 zsh glob*.txt(D.)
将允许它也匹配确切的文件名.txt
,否则将被跳过。