in reply to File::Find question
$ find /foo/bar -type f -name '*.baz' -print0 | xargs -0 rm
The find(1) variant using -exec some others posted works as well, but spawns a new rm(1) process for every single file, whereas xargs(1) will only spawn a new one after the command line argument buffer has filled up, which usually translates to one rm(1) per several hundred files depending on your shell and system.
(Note the use of the -print0 and -0 parameters to use nullbytes as filename separators - that secures you against filenames with spaces, newlines or other exotic characters in their name.)
All that said and done, the File::Find::Rule module makes this pretty much just as easy in Perl:
use File::Find::Rule; unlink File::Find::Rule->file()->name('*.baz')->in('/foo/bar/');
Makeshifts last the longest.
|
|---|