cat
não usa nenhum tempo significativo da CPU (a menos que esteja envolvida a descriptografia ou descompactação no disco e seja responsável pelo processo cat
, que é a leitura do disco) ou pela memória. Ele apenas lê o conteúdo dos arquivos e os grava no pipe em pequenos trechos em um loop.
No entanto, aqui, você não precisa disso. Você pode apenas fazer:
gzip -c file1 file2 file3 file4 > compress.gz
(não que isso faça uma diferença significativa).
Você pode diminuir a prioridade do processo gzip
(wrt CPU scheduling) com o comando nice
. Alguns sistemas possuem um comando ionice
para o mesmo com E / S.
nice -n 19 ionice -c idle pigz -c file1 file2 file3 file4 > compress.gz
No Linux, seria executada uma versão paralela de gzip
com o menor impacto possível sobre o sistema.
Ter compress.gz
em um disco diferente (se estiver usando armazenamento rotacional) o tornaria mais eficiente.
O sistema pode armazenar em cache os dados que cat
ou gzip/pigz
leem na memória, se houver memória disponível para isso. Ele faz isso no caso de você precisar desses dados novamente. No processo, pode despejar outros dados em cache que seja mais útil. Aqui, esses dados provavelmente não precisam estar disponíveis.
Com o GNU dd
, você pode usar iflag=nocache
para avisar ao sistema para não armazenar os dados em cache:
for file in file1 file2 file3 file4; do
ionice -c idle dd bs=128k status=none iflag=nocache < "$file"
done | nice pigz > compress.gz