我使用下面的代码来解析文件的目录并从每个文件中读取每一行:
for file in /tmp/path/*; do
while read line; do
[Doing some stuff...]
done < "$file"
done
我注意到我正在读取的目录是否包含子目录,它会尝试读取子目录并且脚本退出时出现以下错误:
read: read error: 0: Is a directory
我不确定在从目录中的多个文件中读取行时如何排除子目录。任何帮助表示赞赏...
`
答案 0 :(得分:1)
您可以使用Bash条件来测试文件是目录还是&#34;常规&#34;在每次循环迭代中都有文件,但这会让你遇到另一个问题:如果有很多文件怎么办?如果/tmp/path/*
扩展为大量(或几个很长的)文件名,则会出现问题,因为存在最大命令行长度限制。
更好的方法是使用find
。像这样:
find /tmp/path -depth 1 -type f | while read file; do
# ...
这样你就永远不会达到命令行长度限制(因为你永远不会在shell中扩展),尽管如果你的文件名中包含换行符,你仍然会遇到问题(恐怖!)。如果您的文件名可能包含换行符,则可以尝试find -print0
。