从文件循环读取时,运行多个线程

从文件循环读取时,运行多个线程

我已经构建了不使用线程的 bash 脚本。我想在您的帮助下实现它。

我正在运行Threadripper 3990X意味着我可以运行很多线程。

现在我的 bash 脚本看起来像这样:

#!/bin/bash
#!/usr/bin/env python3

while true; do # Start
while read -r line; do  # 1
python3 script1.py -d $line --output file.txt # 2
done < domain && while read -r line; do  # 3
./script2 -d $line # 4
done < domain && while read -r line; do # 5
go run main.go -d $line -o file2.txt # 6
done < domain && mv *.txt /mnt/c/savehere && # 7
dos2unix savehere/*.txt && sort savehere/*.txt | uniq | tr -d '<>,' > results-$(date +%d-%m-%Y_%H_%p).txt && python3 discord-notify.py # 8
done # End

domain文件包含500-1500域列表,然后bash, python, golang逐行传递给脚本,完成后,它们将.txt文件输出到"root"文件夹,然后移动到/mnt/c/savehere文件夹并合并到一个.txt文件中,完成后通知我不和谐和自动。再次启动 bash 脚本。

速度实际上并没有那么慢,但是因为我运行的是强大的 CPU,所以可能有办法使这个脚本运行得更快并节省大量时间。

答案1

适当的缩进确实可以增加清晰度。不要忘记引用您的变量:

while true; do
    while IFS= read -r line; do 
        python3 script1.py -d "$line" --output file.txt
    done < domain && 
    while IFS= read -r line; do 
        ./script2 -d "$line"
    done < domain && 
    while IFS= read -r line; do
        go run main.go -d "$line" -o file2.txt
    done < domain && 
    mv *.txt /mnt/c/savehere &&
    dos2unix savehere/*.txt && 
    sort savehere/*.txt | uniq | tr -d '<>,' > results-$(date +%d-%m-%Y_%H_%p).txt && 
    python3 discord-notify.py
done

xargs可以像 shell while-read 循环一样工作,并且可能会快得多:

while true; do
    xargs -d '\n' -I LINE python3 script1.py -d LINE --output file.txt < domain &&
    xargs -d '\n' -I LINE ./script2 -d LINE                            < domain && 
    xargs -d '\n' -I LINE go run main.go -d LINE -o file2.txt          < domain && 
    mv *.txt /mnt/c/savehere                                                    &&
    dos2unix savehere/*.txt                                                     && 
    sort savehere/*.txt | uniq | tr -d '<>,' > results-$(date +%d-%m-%Y_%H_%p).txt && 
    python3 discord-notify.py
done

相关内容