如何迭代文件列表并对其执行操作

如何迭代文件列表并对其执行操作

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

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

我正在努力tcsh并且不想打开新的 shell,因为我想将其作为别名而不是脚本 - 这样可行吗?

答案1

直接使用别名不适用于此应用程序。类似下面的代码很接近,但您得到的是 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

答案2

尝试一些类似的事情

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

阅读 find 的手册页以了解更多详细信息。

相关内容