到目前为止,我一直在使用vim */**
它似乎可以打开子目录中的所有文件,但是不是当前目录中的文件,并vim *
打开该current
目录中的所有文件。但是如何打开当前目录下的所有文件和所有子目录?
答案1
和zsh
:
vim ./**/*(.)
其他外壳:
find . -name '.?*' -prune -o -type f -exec vim {} +
仅打开(非隐藏)常规的任何级别子目录中的文件(不是目录、符号链接、管道、设备、门、套接字...)。
vim ./**/*(D-.)
其他 shell,GNU find
:
find . -xtype f -exec vim {} +
还可以打开隐藏文件(并遍历隐藏目录)和常规文件的符号链接。
和:
vim ./***/*(D-.)
其他外壳:
find -L . -type f -exec vim {} +
在查看子目录时也可以遍历符号链接。
如果您只想要一级子目录:
vim ./* ./*/*
请注意,在 glob 中添加前缀是一个好习惯,以防./
某些文件名以-
或开头+
。
(当然,这些find
也可以在. 请注意,如果文件列表很大,并且至少对于 GNU ,zsh
它们可能会运行多个实例,将无法跳过名称包含不形成的字节序列的隐藏文件/目录您所在区域中的有效字符)。vim
find
答案2
在 bash 中shopt -s extglob
:
for file in **/**; do [[ -f "$file" ]] && vim "$file"; done
请注意,根据斯蒂芬的评论,在 Bash 4.3 之前,这将遵循所覆盖目录中的任何符号链接。