For loop 如何循环浏览zsh中位于某个路径下的所有文件?
以下是我目前掌握的情况:For loop 如何循环浏览zsh中位于某个路径下的所有文件?,for-loop,zsh,For Loop,Zsh,以下是我目前掌握的情况: for file in $(find /path/to/directory -type f); echo $file; done 但我得到了这个错误: zsh: parse error near `done' 您是否可以检查在$file周围添加“是否可以像这样解决此问题: for file in $(find /path/to/directory -type f); echo "$file"; done 编辑: 将do添加到echo之前,并告诉我它是否解决了问题:
for file in $(find /path/to/directory -type f); echo $file; done
但我得到了这个错误:
zsh: parse error near `done'
您是否可以检查在
$file
周围添加“
是否可以像这样解决此问题:
for file in $(find /path/to/directory -type f); echo "$file"; done
编辑:
将do
添加到echo
之前,并告诉我它是否解决了问题:
for file in $(find /path/to/directory -type f); do echo "$file"; done
无需使用
find
。您可以尝试以下方法:
for file in /path/to/directory/**/*(.); do echo $file; done
或
。所以**
匹配a/**/b
下面的任何a
。它基本上与列表b
生成的内容相匹配find a-name b
是一个函数,它告诉zsh只匹配普通文件。它相当于()
中的查找
选项-type f
- 在
周围不需要双引号,因为$file
- 第一个版本是
循环的常规形式;第二个是没有for
和do
done
出现错误的原因是由于最后一点:在循环中运行单个命令时,您需要同时执行
do
和done
或不执行这两个命令。如果要在循环中运行多个命令,则必须使用它们。在zsh
中,与bash
不同,默认情况下禁用WordSpliting(除非出于某种原因设置了sh word\u split
),引用变量无效。如果找不到文件,则会打印错误。如何禁用该消息?@LarsNyström您可以将N
添加到glob限定符e中。g<代码>用于/path/to/directory/***(N.)中的文件;echo$文件。这将为该模式设置NULL\u GLOB
选项,该选项将从参数列表中删除该模式,而不是报告错误。因此,如果不存在匹配的文件,该命令将有效地减少为for file in;echo$文件
。
for file in /path/to/directory/**/*(.); echo $file