从bash中的文件列表中裁剪文件

时间:2011-08-29 21:28:12

标签: bash shell

所以我想在一个目录中做一个简单的发现:

find /HOME/ | grep .properties

然后使用此列表我想清除某些文件,假设一个是server.properties,另一个是testing.properties。

在取出这些之后,我想做一个快速for循环,它会将每个没有被过滤掉的重新文件传递给一个函数。函数调用就像是

extractHash FILE OUTPUTFILE

我希望这是有道理的,如果不是,我会尽量更清楚。

由于

4 个答案:

答案 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