如何循环遍历zsh中某个路径下的所有文件?
How to loop through all the files located under a certain path in 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
编辑:
在 echo
之前添加 do
如果它解决了问题请告诉我:
for file in $(find /path/to/directory -type f); do echo "$file"; done
不需要使用find
。您可以尝试以下方法:
for file in /path/to/directory/**/*(.); do echo $file; done
或
for file in /path/to/directory/**/*(.); echo $file
-
**
pattern matches multiple directories recursively。所以 a/**/b
匹配任何低于 a
的 b
。它基本上匹配 find a -name b
生成的列表。
(.)
是一个 glob qualifier 并告诉 zsh 只匹配普通文件。它等同于 find
. 中的 -type f
选项
- 你真的不需要在
$file
周围加双引号,因为 zsh does not split variables into words on substitution.
- 第一个版本是
for
循环的常规形式;第二个是 short form 没有 do
和 done
出现错误的原因是最后一点:当 运行 在循环中使用单个命令时,您需要 do
和 done
或 none 其中。如果你想运行循环中有多个命令,你必须使用它们。
这是我目前的情况:
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
编辑:
在 echo
之前添加 do
如果它解决了问题请告诉我:
for file in $(find /path/to/directory -type f); do echo "$file"; done
不需要使用find
。您可以尝试以下方法:
for file in /path/to/directory/**/*(.); do echo $file; done
或
for file in /path/to/directory/**/*(.); echo $file
-
**
pattern matches multiple directories recursively。所以a/**/b
匹配任何低于a
的b
。它基本上匹配find a -name b
生成的列表。 (.)
是一个 glob qualifier 并告诉 zsh 只匹配普通文件。它等同于find
. 中的 - 你真的不需要在
$file
周围加双引号,因为 zsh does not split variables into words on substitution. - 第一个版本是
for
循环的常规形式;第二个是 short form 没有do
和done
-type f
选项
出现错误的原因是最后一点:当 运行 在循环中使用单个命令时,您需要 do
和 done
或 none 其中。如果你想运行循环中有多个命令,你必须使用它们。