Из-за того, чтоhttps://mywiki.wooledge.org/BashPitfalls#Non-atomic_writes_with_xargs_-P(вывод параллельных заданий в xargs
может быть смешанным ), я бы вместо этого использовал GNU Parallel:
cat infile |
parallel -P0 -q curl {} -o /dev/null --silent --head --write-out "%{http_code} {}\n" > outfile
В данном конкретном случае использование xargs
может быть безопасным, потому что вывод такой короткий, поэтому проблема с использованием xargs
заключается скорее в том, что если кто-то позже изменит код, чтобы сделать что-то большее, он больше не будет безопасно. Или, если кто-то читает этот вопрос и думает, что может заменить curl
чем-то другим, то это тоже может быть небезопасно.
Это может быть быстрее:
doit() {
while read LINE; do
curl -o /dev/null --silent --head --write-out "%{http_code} $LINE\n" "$LINE"
done
}
export -f doit
parallel -j0 --pipepart -a infile --block -10 doit > outfile