Find and Remove Files That Have Spaces In The Name
Whenever I need this, it takes me seemingly forever to figure this out. Blog it!
‘find’ is a great GNU utility for digging up files in directories. ‘rm’ is a staple command for any linux user. Combining the two commands can be fun and powerful.
find /home/luser -type f -name '\*.mpg' -exec rm -f {} \\;
The above command calls rm -f
for each file. A faster version of this uses xargs for a single call.
find /home/luser -type f -name '\*.mpg' | xargs rm -f
Hooray! We just deleted all mpg files in luer’s home directory. Unless, of course, any of those files had a name that included a space. Doh! One way to get around this is to use this modified version of the above command.
find /home/luser -type f -name '\*.mpg' | tr "\\n" "\\000" | xargs -0 rm -f
Update: As Stuart notes in the comments, you should be able to replace the ’tr’ command with the find -print0 option. I wasn’t able to get it to work, but maybe it helps you!
find /home/luser -type f -name '\*.mpg' -print0 | xargs -0 rm -f
Update #2: As Ole notes in the comments, GNU parallel is another option which provides parallel process running.
find /home/luser -type f -name ‘\*.mpg’ | parallel rm -f