所以我想在一个目录中做一个简单的发现:
find /HOME/ | grep .properties
然后使用此列表我想清除某些文件,假设一个是server.properties,另一个是testing.properties。
在取出这些之后,我想做一个快速for循环,它会将每个没有被过滤掉的重新文件传递给一个函数。函数调用就像是
extractHash FILE OUTPUTFILE
我希望这是有道理的,如果不是,我会尽量更清楚。
由于
答案 0 :(得分:3)
for file in "`find ~ -name \*.properties |grep -v -e server.properties -e testfile.properties`"; do
extractHash $file output
done
答案 1 :(得分:3)
使用while
而非for
来迭代文件:如果存在无关的空格,for
将无法按预期迭代反引号程序的输出:
find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties` |
while read -r file; do
extractHash "$file" OUTPUTFILE
done
如果您的所有文件都在当前目录中,请使用扩展的通配模式,for
适合迭代文件名通配符:
shopt -s extglob
for file in !(server|testing).properties; do
extractHash "$file" out
done
答案 2 :(得分:1)
在csh中你会使用foreach:
#!/bin/csh
set files=`find /HOME/ | grep .properties`
foreach file ($files)
set outfile = $file.out
extractHash $file $outfile
end
不确定bash - 它有一个类似的for循环,但我从来没有学过它:)
答案 3 :(得分:1)
首先,我建议对-name
使用find
参数,而不是通过grep
管道每个文件名。然后你可以做类似的事情:
for file in `find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties`; do
extractHash "$file" OUTPUTFILE
done