J'ai un ensemble de serveurs remplis chacun avec un tas de fichiers qui peuvent être compressés. Les serveurs ont tous un nombre différent de cœurs. Comment puis-je écrire un script bash pour lancer un gzip pour chaque noyau et m'assurer que les gzips ne zippent pas le même fichier?
Si vous êtes sous Linux, vous pouvez utiliser les xargs de GNU pour lancer autant de processus que vous avez de cœurs.
CORES=$(grep -c '^processor' /proc/cpuinfo)
find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip -9
Il existe une implémentation de gzip qui est multithread, pigz . Puisqu'il compresse un fichier sur plusieurs threads, il devrait être en mesure de lire à partir du disque plus efficacement, par rapport à la compression de plusieurs fichiers à la fois.
Vous voudrez peut-être envisager de vérifier parallèle GN . J'ai aussi trouvé cette vidéo sur youtube qui semble faire ce que vous cherchez.