bash - 在for循环中并行
问题描述
我有一个包含约 200k 文件的目录,我想快速找到损坏/格式错误的 zip/RAR 文件
这是我们编写的简单 bash 脚本:
#!/bin/bash
path="/home/xyz/"
for filename in $(ls $path)
do
output=:$(7za t $path$filename);
if echo "$output" | grep -q "Everything is Ok"; then
echo "MATCH"
else
echo "NOK_FILE:$filename"
fi
done;
所以测试 ~200k 文件大约需要 ~14 小时才能按顺序完成,所以我们需要在for
循环中运行并行检查
我需要在大约 10 分钟内完成检查
我尝试了 StackOverflow 中提到的很多方法,但我找不到好方法
解决方案
这是一条评论,但使用答案字段以获得更好的格式。这不能解决您的问题,但是您可以稍微清理一下脚本:
#!/bin/bash
path=/home/xyz/
for filename in $path/*; do
if 7za t "$filename" | grep -q "Everything is Ok"; then
echo "MATCH"
else
echo "NOK_FILE:$filename"
fi
done
推荐阅读
- r - 使用 R 通过 url 批量下载时分配用作文件名链接的字符串
- web-applications - 我想要一些关于如何使 Web 应用程序自主的材料或资源
- oracle - 使用 ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_UPDATABLE 是否影响性能
- html - Google 搜索将网页名称显示为主页(当前)而不是页面名称
- java - 使用另一个列表对列表进行排序。根据第二个列表交换项目
- web-applications - 如何提供 .mbtiles(矢量图块)并在 Web 应用程序中使用它们?
- android-recyclerview - 使用改造加载更多项目的 Recyclerview
- c++ - 使用另一个模板类的嵌套名称说明符专门化一个模板类
- python - 在使用 xarray 的 netCDF 文件上使用 Prophet
- typescript - 使用枚举作为泛型类型