Что лучше: передать все файлы в mv или запустить несколько процессов mv параллельно?

Похоже, вы пытаетесь запустить входные файлы через awk и сохранить результаты под другим именем. Если вам не нужно особенное именование файлов, это должно служить:

for i in *.txt; do
    awk -f NormalizeFiles.awk $i > $i.out
done

Хотя ваш вопрос помечен как bash, ваш синтаксис, как кто-то указал, не является bash, например неправильное использование скобок. Синтаксис %% используется неправильно и не кажется подходящим для вашей цели; однако вы должны проверить http://www.tldp.org/LDP/abs/abs-guide.pdf , если вы хотите узнать об этом больше.

1
21.03.2013, 07:33
2 ответа

Если бы в параллельном перемещении файлов были какие-то достоинства, велика вероятность, что mv уже делал бы это самостоятельно, либо существовал бы аналогичный инструмент. ;)

Нет смысла запускать mv параллельно на одном и том же исходном / целевом диске, поскольку обычно скорость носителя в любом случае ограничена. Если / usb_storage / - это USB-накопитель, это не заставит его работать быстрее.

mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/

Должен быть лучшим методом, поскольку он делает то, что вы хотите, блокирует до завершения (чтобы ваша альтернатива была примерно эквивалентной, вам нужно добавить wait в конце). Последовательная запись файлов вместо параллельной также помогает предотвратить ненужную фрагментацию файлов.

Кроме того, в случае, если / usb_storage / недостаточно велик для хранения всех файлов, на которые вы перемещаетесь, вместо трех неполных / без копий при параллельной работе вы можете получить хотя бы один полный файл с последовательным решением.

2
29.04.2021, 00:50

Есть потенциальный прирост производительности при параллельной работе mv: пока один процесс ожидает возврата чтения, если другой файл находится в кэше, он может сразу перейти к выполнению другого запроса ввода-вывода. Кроме того, планировщик ввода-вывода может упорядочить запросы секторов для всех файлов, которые вы пытаетесь переместить, чтобы головки чтения/записи на HDD (очевидно, не так много на USB-носителях) могли перемещаться как можно меньше.

Учитывая это, преимущества параллельной работы по производительности будут минимальными, если только у вас нет сильной фрагментации файловой системы (чтобы избежать перемещения головок чтения/записи по всему периметру).

Однако если вас беспокоит производительность, я бы убедился, что планировщик вашего USB-носителя работает в режиме "noop", чтобы он не тратил время на переупорядочивание запросов, когда это не имеет значения для одноразовой записи на носитель без головок чтения/записи. Если ваш штатный планировщик HDD - cfq, вы также можете попробовать использовать магию ionice для приоритета операций mv над всем остальным, что происходит в системе.

0
29.04.2021, 00:50

Теги

Похожие вопросы