Тестирование показало, что это примерно в 100 раз быстрее, чем следующий лучший подход, приведенный до сих пор.
#!/bin/bash
IN="${1}"
OUT="${2}"
for i in {1..2000}; do
echo "${IN}"
done | xargs cat > "${OUT}"
Причина, по которой это происходит намного быстрее, состоит в том, что он не открывается, пытается завершить, добавить и закрыть выходной файл. Он открывает выходной файл один раз и направляет в него данные за одну большую непрерывную запись. Он также вызывает cat
как можно меньше раз. Он может вызывать cat
только один раз, даже в зависимости от максимальной длины командной строки системы и длины имени входного файла.