使用bash识别多种文件类型

时间:2015-10-12 13:03:01

标签: linux bash shell unix command-line

我很确定我之前已经看过这个,但我无法记住确切的语法。

假设您有几个文件扩展名不同的文件:

foo.txt
bar.rtf
index.html

而不是对所有这些(cat *)执行某些操作,您只想在3个文件扩展名中的2个上运行命令。

你不能做这样的事吗?

cat ${*.txt|*.rtf}

我确定有一些find技巧首先识别文件并将它们传递给命令,但我认为bash支持我所谈论的内容而不必做这一点。

3 个答案:

答案 0 :(得分:4)

您想要的语法是cat *.{txt,rft}。使用逗号代替管道。

$ echo foo > foo.txt
$ echo bar > bar.rft 
$ echo "bar txt" > bar.txt 
$ echo "test" > index.html
$ cat *.{txt,rft}
bar txt
foo
bar
$ ls *.{txt,rft}
bar.rft  bar.txt  foo.txt

但是Anthony Geoghegan said in their answer可以使用更简单的方法。

答案 1 :(得分:2)

Shell globbing比正则表达式更基本。如果您想cat所有带有.txt.rtf后缀的文件,您只需使用:

cat *.txt *.rtf

将扩展glob模式以列出与模式匹配的所有文件名。在您的情况下,上面的命令将调用带有catfoo.txt的{​​{1}}命令作为其参数。

答案 2 :(得分:0)

这是一种使用命令替换的简单方法。 cat $(find . -type f \( -name "*.txt" -o -name "*.rtf" \)) 但是Anthony Geoghegan's answer要简单得多。我也从中学到了。