如何遍历文件列表并对其执行操作

我想写一个脚本(或最好是一个别名),执行以下操作:

  1. find所有匹配模式*.jar的文件
  2. 迭代所有这些文件,然后运行jar tvf <jar file name> | grep <Some argument> jar tvf <jar file name> | grep <Some argument>
  3. 如果jar包含名称与argument匹配的文件,则打印

我在tcsh工作,宁愿不打开一个新的壳,因为我想这是一个别名,而不是一个脚本 – 这是可行的吗?

直接的别名不适用于这个应用程序。 像这样的东西会接近,除了你会得到的是输出的grep,而不是jar文件名:

 alias targrep="find . -name '*.jar' -exec jar tvf {} \; | grep" targrep someterm 

要获得文件名,你应该切换到使用一个函数,而不是一个别名,以便你有更多的控制参数和值的地方。 (注:bash格式,你可能需要修改为tcsh)

 function jargrep () { find . -name '*.jar' | while read jar; do jar tvf $jar | grep -q $@ && echo $jar done } jargrep someterm 

尝试一些沿线的东西

 find . -name '*.jar' -exec 'jar tvf | grep <some agrument>' 

阅读手册页查找更多细节。