我使用以下代码来解析文件的目录并从每个文件中读取每一行:
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
。