4

I want to run this command in background because the process could take a long time. How can I send it to a background process?

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

This does not work:

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

How can I do this instead?

1
  • Wait, your second example should work (except for the spaces problem slhck mentions).
    – derobert
    Jul 24, 2013 at 19:43

2 Answers 2

9

If you want to run both in background, put them in a subshell:

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

But, please, don't do this. Piping find output into xargs is unsafe unless you use the following options, which are supported in GNU and BSD find and xargs:

find … -print0 | xargs -0 …

If find returned files with spaces in their name you could – without even knowing – irreversibly delete the wrong folders. Carefully read the find manual and the section about deleting files for more info.

The safest way, in your case, would be:

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

Depending on the hardware that the filesystem is sitting on it may be faster to delete in parallel:

( find . | parallel -X rm ) &

In contrast to xargs GNU Parallel deals correctly with space, " and ' in file names. Only if you have file names containing newline you will need -print0/-0.

10 seconds installation:

wget -O - pi.dk/3 | bash

Watch the intro video for a quick introduction: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .