我正在尝试列出当前目录中文件的最大行长度,但是我的命令工作有问题。我相信在我的exec命令中转义大括号{}
是一个问题。在搜索了大量的find exec escape答案之后,我无法找到有关如何在exec命令中转义括号{}
的任何内容。我错过了什么?
find . -iname *.page -exec awk '{if(length($0) > L) { LINE=$0;L = length($0)}}
END {print LINE"|"L}' {}\; | sort
答案 0 :(得分:1)
你想在每个文件上运行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脚本不太确定但是因为你认为它是你需要的,所以现在让我们传递它。
答案 1 :(得分:1)
它们是原始命令的多个问题,其中没有一个是转义{}
。第一个问题是{}
和\;
之间需要有一个空格。第二个问题与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