如何在一行中获取bash中特定扩展名的文件列表?

时间:2015-08-31 10:14:01

标签: bash

这是我从*.png文件夹子目录中获取positive文件的方法:

FILES=./positive/*/*.png

如何修改此命令以同时获取*.png*.jpg*.bmp个文件?只需一行。

解决方案1(感谢PiotrSliwa):

FILES=($(find ./positive/ -name '*.png' -o -name '*.jpg' -o -name '*.bmp'))

并使搜索案例不敏感:

FILES=($(find ./positive/ -iname '*.png' -o -iname '*.jpg' -o -iname '*.bmp'))

解决方案2(感谢赛勒斯):

shopt -s extglob; 
FILES=( ./positive/*/*.@(png|jpg|bmp) )

2 个答案:

答案 0 :(得分:2)

shopt -s extglob                     # enable extended globbing
ls ./positive/*/*.@(png|jpg|bmp)
  

?(pattern-list):匹配给定模式的零次或一次

     

*(pattern-list):匹配给定模式的零次或多次出现

     

+(pattern-list):匹配给定模式的一个或多个实例

     

@(pattern-list):匹配给定模式之一

     

!(pattern-list):匹配除了某个给定模式之外的任何内容

来源:http://www.linuxjournal.com/content/bash-extended-globbing

填充数组:

shopt -s extglob
files=( ./positive/*/*.@(png|jpg|bmp) )
for f in "${files[@]}"; do echo "$f"; done

答案 1 :(得分:1)

您可以使用PDRectangle rect = page.getMediaBox(); float positionY = rect.getWidth(); positionY = positionY - pdfWriter.defaultBottomMargin; if(positionY < positionX) { positionY = rect.getWidth(); PDPage page2 = page; rect = page2.getMediaBox(); document.addPage(page2); PDPageContentStream contentStream = new PDPageContentStream(document, page2); contentStream.appendRawCommands("T*\n"); contentStream.beginText(); // contentStream.setFont(font, 12); contentStream.moveTextPositionByAmount(positionX, positionY); contentStream.drawString(tmpText[k]); contentStream.endText(); contentStream.close(); }

find

要将其用于find ./positive/ -name *.png *.png**.jpg,您可以利用代表“或”关键字的*.bmp选项。有了它,您可以加入一些-o表达式:

-name <NAME>

或者(如果您热衷于图形find ./positive/ -name *.png -o -name *.jpg -o -name *.bmp 运算符):

or

此外,如果您不确定所有文件都是小写名称 - 您可能需要使用find ./positive/ -name *.png || -name *.jpg || -name *.bmp (不区分大小写)选项而不是-iname

相关问题