我正在尝试列出当前目录中文件的最大行长度,但我的命令无法正常工作。{}
我相信这是在我的 exec 命令中转义大括号的问题。在谷歌搜索了大量 find exec 转义答案后,我无法找到有关如何{}
在 exec 命令中转义括号的任何信息。我错过了什么?
find . -iname *.page -exec awk '{if(length($0) > L) { LINE=$0;L = length($0)}}
END {print LINE"|"L}' {}\; | sort
它们是原始命令的多个问题,没有一个是逃避的{}
。{}
第一个问题是和之间需要有一个空格\;
。第二个问题与 shell 如何扩展 find iname 参数中的通配符有关*.page
。
"*" 在命令行被传递给 find(1) 之前由 shell 扩展。如果目录中只有 1 项,那么它可以工作。如果目录中有多个项目,则它会失败,因为命令行选项不再正确。
将 *.page 用引号括起来可以解决问题。最终版本是
find . -iname '*.page' -exec awk '{if(length($0) > L)
{ LINE=NR;L = length($0)}} END {print L"|"FILENAME":"LINE}' {} \; | sort -n
它输出每个文件的最长行的排序列表和行号
220|./Example1.page:157
206|./Example2.page:203
您想在每个文件上运行 awk,对吗?
在你的主目录中创建一个脚本:t.sh:
awk '{if(length($0) > L) { LINE=$0;L = length($0)}}
END {print LINE"|"L}' "$1"
命令行:
find . -iname *.page -exec ~/t.sh {} | sort
我不太确定您的 awk 脚本,但既然您认为这是您需要的,那么我们现在就传递下去。