bash 读取多个文件中的数据行不包括子目录



我使用以下代码来解析文件的目录并从每个文件中读取每一行:

for file in /tmp/path/*; do
    while read line; do
    [Doing some stuff...]
    done < "$file"
done

注意到我从中读取行的目录是否有子目录,它会尝试读取子目录,脚本退出并显示以下错误:

read: read error: 0: Is a directory

我不确定从目录中的多个文件中读取行时如何排除子目录。 任何帮助不胜感激...

'

您可以使用 Bash 条件来测试文件是每个循环迭代中的目录还是"常规"文件,但这会给您留下另一个迫在眉睫的问题:如果有很多文件怎么办? 如果/tmp/path/*扩展到许多(或几个很长)的文件名,您将遇到问题,因为存在最大命令行长度限制。

更好的方法是使用 find . 像这样:

find /tmp/path -depth 1 -type f | while read file; do
   # ...

这样,您将永远不会达到命令行长度限制(因为您永远不会在 shell 中扩展),尽管如果您的文件名中包含换行符,您仍然会遇到问题(恐怖! 如果文件名中可能有换行符,可以尝试find -print0

最新更新