如何在bash过程中获取选择性文件列表

时间:2016-04-07 06:36:18

标签: bash shell unix grep

我的目录/foo/bar/中有几百个文件。我只想grep不以Not开头的文件列表,但以.vcf结尾。

我在下面的代码中选择以.vcf结尾的所有文件,但我只想将这个bash代码循环到文件(A_test.chr1.vcfB_test.chr2.vcfC_test.chr3.vcf上)来自/foo/bar/中的文件。

for i in /foo/bar/*.vcf;do
       do something
    done

/foo/bar/

中的文件
    A_test.chr1.vcf
    B_test.chr2.vcf
    C_test.chr3.vcf
    A_test.chr4.other
    Not_other.chr4.other  
    Not1_test.chr1.vcf
    Not2_test.chr2.vcf

2 个答案:

答案 0 :(得分:0)

或者:

find /foo/bar -type f \( ! -name "Not*" -iname "*.vcf" \) | xargs DoSomething

find /foo/bar -type f \( ! -name "Not*" -iname "*.vcf" \) -exec DoSomething {} \;

语法:

for i in $(find /foo/bar -type f \( ! -name "Not*" -iname "*.vcf" \); DoSomething; done

也可以,但如果你的文件在文件名中有空格,那就太危险了。

修改

基本上所有东西都基于find命令。

mkdir -p foo/bar
cd foo/bar/
touch A_test.chr4.vcf  A_test.chr4.other Not_other.chr4.other Not1_test.chr1.vcf
cd ../..
find foo/bar/ -type f \( ! -name "Not*" -iname "*.vcf" \)

结果是:

./A_test.chr4.vcf

答案 1 :(得分:-2)

尝试下一个: find ./foo/bar/ -type f -name *.vcf | while read -r line; do echo $line & done;