Ejecutando find y xargs en segundo plano

4

Quiero ejecutar este comando en segundo plano porque el proceso podría llevar mucho tiempo. ¿Cómo puedo enviarlo a un proceso en segundo plano?

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

Esto no funciona:

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

¿Cómo puedo hacer esto en su lugar?

barrido
fuente
Espere, su segundo ejemplo debería funcionar (a excepción de los problemas de espacios que menciona slhck).
derobert

Respuestas:

8

Si desea ejecutar ambos en segundo plano, colóquelos en una subshell:

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

Pero, por favor, no hagas esto . La findsalida de la tubería xargsno es segura a menos que use las siguientes opciones, que son compatibles con GNU y BSD findy xargs:

find … -print0 | xargs -0 …

Si finddevuelve archivos con espacios en su nombre, podría, sin siquiera saberlo, eliminar irreversiblemente las carpetas incorrectas. Lea atentamente el findmanual y la sección sobre la eliminación de archivos para obtener más información.

La forma más segura, en su caso, sería:

find /tmp/ -type f -mtime +3 -delete &
slhck
fuente
2

Dependiendo del hardware en el que se encuentre el sistema de archivos, puede ser más rápido eliminarlo en paralelo:

( find . | parallel -X rm ) &

A diferencia de xargsGNU, Parallel trata correctamente con el espacio "y" en los nombres de archivo. Solo si tiene nombres de archivo que contienen nueva línea necesitará -print0 / -0.

Instalación de 10 segundos:

wget -O - pi.dk/3 | bash

Mire el video de introducción para una introducción rápida: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Ole Tange
fuente