我有一个非常微妙的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
答案 0 :(得分:2)
当然,试试这个:
tar -zxvf $(ls *.tgz | head -1) file1
如果没有与模式匹配的话,你应该考虑会发生什么......
答案 1 :(得分:2)
使用-quit
主要find
:
find -iname '*.tgz' -exec tar -zxvf '{}' \; -quit
当操作从左到右处理时,这将在第一个匹配项上运行tar
,然后结束find
命令。