如何根据扩展名解析文件



我遇到的情况是,某些目录中有不同类型的文件(不同扩展名)。我不知道特定目录中存在什么类型的文件。让我们假设以下情况:

所有五个目录 1、2、3、4、5 都有一个通用路径,如下所示:

/dir1/dir2/dir3/1/
/dir1/dir2/dir3/2/
/dir1/dir2/dir3/3/
/dir1/dir2/dir3/4/
/dir1/dir2/dir3/5/ 

简而言之,1、2、3、4、5 在 dir3 中。

举个例子,
目录 1 和 3 具有扩展名为 .txt
的文件目录 2、4、5 具有扩展名为 .gz

的文件

到目前为止,我正在这样做:

while [ $a -le 5 ]
    do
        cat /dir1/dir2/dir3/"$a"/*.txt | grep "string" > /path/output"$a"
        zcat -f /dir1/dir2/dir3/"$a"/*.gz | grep "string" > /path/output"$a"
        ((a++))
    done

已创建输出,但其中很少是空白的。我确定输入具有我在 grep 中使用的字符串。我认为我正在使用的脚本正在覆盖文件。

如何通过先搜索文件扩展名并相应地执行 cat 或 zcat 来执行此操作?请建议?

编辑:

我还尝试了以下方法:

while [ $a -le 5 ]
    do  
for f in /dir1/dir2/dir3/"$a"/*.txt
  do  
      cat $f | grep "string" > /path/output"$a"  
  done  
for f in /dir1/dir2/dir3/"$a"/*.gz
  do  
      cat $f | grep "string" > /path/output"$a"  
  done   
done
将所有

txt 文件收集在一个数组中,如果该数组不为空,则运行 cat 。否则,请运行zcat 。实际运行的输出将被重定向到输出文件。

shopt -s nullglob
for d in 1 2 3 4 5; do
    txt=(/dir1/dir2/dir3/"$d"/*.txt)
    if (( ${#txt[@]} )); then
        grep "string" "${txt[@]}"
    else
        zcat -f /dir1/dir2/dir3/"$a"/*.gz | grep "string"
    fi > /path/output/"$d"
done

相关内容

  • 没有找到相关文章

最新更新