开发者

Cropping out files from a list of files in bash

So I would like to do a 开发者_如何学Pythonsimple find in a dir with:

find /HOME/ | grep .properties

Then with this list I want to weed out certain files, lets say one is server.properties and another is testing.properties.

After those have been taken out, I want to do a quick for loop that will pass each remaning file that didn't get filtered out into a function one by one. The function call is just something like

extractHash FILE OUTPUTFILE

I hope this makes sense, I'll try to be more clear if it's not.

Thanks


for file in "`find ~ -name \*.properties |grep -v -e server.properties -e testfile.properties`"; do
    extractHash $file output
done


Use while, not for, for iterating over files: for will not work as you expect for iterating over the output of a backtick-ed program if there is extraneous whitespace:

find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties` |
while read -r file; do
    extractHash "$file" OUTPUTFILE
done

If all your files are in the current directory, use an extended globbing pattern, and for is appropriate to iterate over filename wildcards:

shopt -s extglob
for file in !(server|testing).properties; do
  extractHash "$file" out
done


In csh you would use foreach:

#!/bin/csh 
set files=`find /HOME/ | grep .properties`

foreach file ($files)
  set outfile = $file.out
  extractHash $file $outfile
end

not sure about bash - it has a similar for loop but I never learned it :)


First, I would recommend using the -name argument for find instead of piping every filename through grep. Then you can do something like:

for file in `find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties`; do
    extractHash "$file" OUTPUTFILE
done
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜