我想要编写一个脚本(或者最好是一个别名)来执行以下操作:
- 查找与某个模式匹配的所有文件
*.jar
- 遍历所有这些文件,然后运行
jar tvf <jar file name> | grep <Some argument>
- 如果 a
jar
包含名称与 匹配的文件,则打印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 的手册页以了解更多详细信息。