basic command pipe question
Steven W. Orr
steveo at syslang.net
Mon Jun 19 02:16:42 UTC 2006
On Sunday, Jun 18th 2006 at 14:14 -0700, quoth Don Russell:
=>I need some basic CLI help. :-) I've googled, and read, and I can't find how
=>to erase a bunch of files in one go.
=>
=>Specifically, I need a command that will erase *.zip files, regardless of the
=>text case of the .zip part....
=>
=>So far, I have
=> ls | grep -iE \\.zip$
=>
=>That gives me the correct list of files.... but I don't know how to get rm to
=>process that list.. It doesn't look like rm has an option to read the file
=>name from stdin, it's expecting the file name as a CLI argument.
=>
=>I know this is basic stuff.... I'm obviously missing some fundamental concept
=>of command line processing. :-)
You have gotten three different suggestions so far.
1. Use xargs
ls | grep -i '\.zip$' | xargs rm
2. Use find with -exec
find . -iname \*.zip -exec 'rm {]' \;
3. Use process substitution.
for i in $(find -iname "*.zip"); do rm $i; done;
Always, wait, should I say that again in reverse, blinking underlined
text?, *ALWAYS* use form 1.
If you don't understand it, read the man page. Use it. Love it.
Use of 1 will run one skinny process.
2. will execute a seperate process for *EACH* file to be deleted.
3. will execute a seperate process for *EACH* file to be deleted and would
potentially overflow before the for loop even starts.
--
steveo at syslang dot net TMMP1 http://frambors.syslang.net/
Do you have neighbors who are not frambors?
More information about the fedora-list
mailing list