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