如何将模式匹配限制为第一个匹配的文件

时间:2013-02-21 13:04:10

标签: bash

我有一个非常微妙的bash问题:

给出目录foo

$ ls
foo.tgz bar.tgz baz.tgz

我想生成一个bash单行程序,它提取模式的第一个tarball,如:

bash -c "tar -zxvf foo.tgz file1" # fine
bash -c 'tar -zxvf   *.tgz file1" # oups trying to extract bar.tgz from foo.tgz!

是否有可能将模式匹配限制为第一个扩展参数?

精修:

find -iname '*.tgz' | xargs tar -zxvf # oups! cannot add restriction to only extract file1

2 个答案:

答案 0 :(得分:2)

当然,试试这个:

tar -zxvf $(ls *.tgz | head -1) file1

如果没有与模式匹配的话,你应该考虑会发生什么......

答案 1 :(得分:2)

使用-quit主要find

find -iname '*.tgz' -exec tar -zxvf '{}' \; -quit

当操作从左到右处理时,这将在第一个匹配项上运行tar,然后结束find命令。