bash脚本读取目录中的所有文件

时间:2011-09-03 02:23:44

标签: linux bash

如何在目录中循环?我知道有for f in /var/files;do echo $f;done;问题是它会一次性吐出目录中的所有文件。我想逐个去,并能够使用$ f变量做一些事情。我认为while循环最适合,但我无法弄清楚如何实际编写while循环。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:52)

一个简单的循环应该起作用:

for file in /var/*
do
    #whatever you need with "$file"
done

请参阅bash filename expansion

答案 1 :(得分:9)

要使用while循环编写它,您可以执行以下操作:

ls -f /var | while read -r file; do cmd $file; done

这样做的主要缺点是运行cmd 一个子壳,如果你正在尝试,会造成一些困难 设置变量。主要优点是外壳 不需要将所有文件名加载到内存中,并且 没有全球化。当你有很多文件时 目录,这些优点很重要(那是 为什么我在ls上使用-f;在一个大型目录中ls本身就可以 需要几十秒才能运行,而-f速度则可以 很明显。在这种情况下'for file in / var / *' 可能会因全局错误而失败。)

答案 2 :(得分:5)

你可以没有循环:

find /path/to/dir -type f -exec /your/first/command \{\} \; -exec /your/second/command \{\} \; 

HTH