Subj : Re: How to execute more than one command with find -exec? To : comp.os.linux From : noi Date : Fri Nov 19 2004 03:41 pm On Fri, 19 Nov 2004 09:30:51 +0800, Cheng Mo thoughtfully wrote: > noi wrote: >> On Thu, 18 Nov 2004 17:35:30 +0800, Cheng Mo thoughtfully wrote: >> >> >>>The scenario is: >>>In folder XXX there are lots of *.gif files. Those *.gif files whose >>>filename don't appear in file abc.txt should be deleted. I want to do >>>this job in one line command. >>>find XXX -name "*.gif" -exec ........... \; But I don't know how to >>>write the part of .............. >>> >>>I tried >>>find XXX -name "*.gif" -exec grep {} abc.txt || rm {} \; But it seems >>>-exec don't take behind as a combination of two commands. Anybody can >>>tell me how to execute more than one command with find -exec? Thanks >> >> >> >> Seems complicated with find. Alternative? tar -zcf gif.tgz -T abc.txt >> && find XXX -iname "*.gif" -exec rm {}\; >> >> In your example, >> >> find XXX -iname "*.gif" | grep -v -f abc.txt | xargs rm > > find XXX -iname "*.gif" will output filename with XXX as prefix, but in > abx.txt only filename is written. How to cut those XXX? grep -v -f abc.txt -v inverses the matching of patterns in the -f abc.txt file. so if echo "3.g" > abc.txt would find and delete all *.gif files in XXX except those files containing string "3.g" regardless of prefix. find XXX YYY -iname "*.gif" finds all files in folder XXX and YYY in upper or lowercase. .