我如何遍历文件夹?我知道可以使用 for f in /var/files;do echo $f;done;
但是它会一次性输出目录中的所有文件。我想一个一个地处理每个文件并能够使用变量 $f。我认为 while 循环最适合这种情况,但我不知道该如何编写 while 循环。
感谢任何帮助。
使用 while 循环可以这样写:
ls -f /var | while read -r file; do cmd $file; done
这种方法的主要缺点是 cmd 是在子shell 中运行的,如果你想设置变量,则会有一些困难。其主要优点是 shell 不需要将所有文件名加载到内存中,并且没有 globbing。当目录中有许多文件时,这些优点是非常重要的(这就是为什么我在 ls 上使用 -f;在一个大目录中,ls 本身可能需要几十秒才能运行,而 -f 可以显著加快速度。在这种情况下,“for file in /var/*”可能会因为 glob 错误而失败)。
.
和 ..
。 - sospedrafind /path/to/dir -type f -exec /your/first/command \{\} \; -exec /your/second/command \{\} \;
HTH
for
循环是完全正确的,但您正在循环遍历单个项,即字面目录名称/var/files
。您的问题描述是不正确的;您发布的程序将只会回显/var/files
。我怀疑您可能想要使用for f in /var/files/*
。请注意,在所有地方都要使用双引号"$f"
。 - tripleee