4 votes

Faire fonctionner find et xargs en arrière-plan

Je veux exécuter cette commande en arrière-plan car le processus pourrait prendre beaucoup de temps. Comment puis-je l'envoyer à un processus en arrière-plan?

find /tmp/ -type f -mtime +3 | xargs rm -Rf

Ceci ne fonctionne pas:

find /tmp/ -type f -mtime +3 | xargs rm -Rf &

Comment puis-je faire cela à la place?

9voto

slhck Points 209720

Si vous voulez les exécuter tous les deux en arrière-plan, mettez-les dans un sous-shell:

(find /tmp/ -type f -mtime +3 | xargs rm -Rf) &

Mais, s'il vous plaît, ne faites pas cela. Piping find output dans xargs est dangereux à moins d'utiliser les options suivantes, qui sont supportées dans GNU et BSD find et xargs:

find … -print0 | xargs -0 …

Si find renvoie des fichiers avec des espaces dans leur nom, vous pourriez - sans le savoir - supprimer irréversiblement les mauvais dossiers. Lisez attentivement le manuel de find et la section sur la suppression de fichiers pour plus d'informations.

La manière la plus sûre, dans votre cas, serait:

find /tmp/ -type f -mtime +3 -delete &

2voto

Ole Tange Points 4059

En fonction du matériel sur lequel le système de fichiers est installé, il peut être plus rapide de supprimer en parallèle :

( find . | parallel -X rm ) &

Contrairement à xargs, GNU Parallel gère correctement les espaces, les " et les ' dans les noms de fichiers. Seulement si vous avez des noms de fichiers contenant des sauts de lignes, vous aurez besoin de -print0/-0.

Installation en 10 secondes :

wget -O - pi.dk/3 | bash

Regardez la vidéo d'introduction pour une présentation rapide : https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X