You can use
rm -v to have
rm print one line per file deleted. This way you can see that
rm is indeed working to delete files. But if you have billions of files then all you will see is that
rm is still working. You will have no idea how many files are already deleted and how many are left.
pv can help you with a progress estimation.
Here is how you would invoke
pv with example output
$ rm -rv dirname | pv -l -s 1000 > logfile
562 0:00:07 [79,8 /s] [====================> ] 56% ETA 0:00:05
In this contrived example I told
pv that there are
1000 files. The output from
pv shows that 562 are already deleted, elapsed time is 7 seconds, and the estimation to complete is in 5 seconds.
pv -l makes
pv to count by newlines instead of bytes
pv -s number tells
pv what the total is so that it can give you an estimation.
- The redirect to
logfile at the end is for clean output. Otherwise the status line from
pv gets mixed up with the output from
rm -v. Bonus: you will have a logfile of what was deleted. But beware the file will get huge. You can also redirect to
/dev/null if you don't need a log.
To get the number of files you can use this command:
$ find dirname | wc -l
This also can take a long time if there are billions of files. You can use
pv here as well to see how much it has counted
$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [ <=> ]
Here it says that it took 4 seconds to count 278k files. The exact count at the end (
278044) is the output from
If you don't want to wait for the counting then you can either guess the number of files or use
pv without estimation:
$ rm -rv dirname | pv -l > logfile
Like this you will have no estimation to finish but at least you will see how many files are already deleted. Redirect to
/dev/null if you don't need the logfile.
- do you really need
rm -r is enough to delete recursively. no need for
rm -ri. It will be fun!