【发布时间】:2018-05-29 18:26:32
【问题描述】:
我的目录结构如下
输出/a/1/multipleFiles
输出/a/2/multipleFiles
输出/a/3/multipleFiles
输出/b/1/multipleFiles
输出/b/2/multipleFiles
输出/b/3/multipleFiles
我想知道每个目录的行数。所以基本上,每个最里面的目录级别而不是文件级别的行数。最里面的目录 1、2、3 是我们为分析生成的不同类型的输出,其中包含多个 hadoop part-xxxx 文件。
我移到输出目录并尝试了以下命令。
find . -maxdepth 2 -type d -name '*' | awk -F "/" 'NF==3' | awk '{print $0"/*"}' | xargs wc -l
但是我得到一个错误
wc: ./a/1/*: No such file or directory
wc: ./a/2/*: No such file or directory
wc: ./a/3/*: No such file or directory
但如果我尝试
wc -l ./a/1/*
我得到了那个特定文件夹的正确输出。
我在这里错过了什么。
编辑:
我更新了我的命令如下,以删除不必要的 awk 命令。
find . -mindepth 2 -maxdepth 2 -type d -name '*' | xargs wc -l
这再次导致错误
wc: ./a/1: Is a directory
wc: ./a/2: Is a directory
wc: ./a/2: Is a directory
【问题讨论】:
-
.a/1/*与./a/1/*不同(.之后的斜线)...您能解释一下 awk 命令在 find 输出中的用途吗?-mindepth会不会有帮助? -
glob 通配符,例如
*被 xargs 解释为原样,没有扩展 --- 因此您看到的错误。 -
您是要计算每个目录中所有文件的行数,还是要计算每个目录中的文件数或每个目录中的文件和目录数或其他?请edit您的问题包括简洁、可测试的样本输入和预期输出,以澄清您正在尝试做的事情,因为现在我们必须尝试弄清楚您想要做的只是一个不做任何事情的脚本你想做吗!
-
@EdMorton:每个最里面的子目录都是我们生成的一些分析的输出,这个最里面的目录有多个hadoop part-xxxx文件,所以我需要统计每个分析填充的记录数,需要发送该值以进行进一步验证。
-
@Sundeep:更新了我的 qsn,谢谢。 find 之后 awk 的目的是,当我运行 find 时,它会列出所有目录和子目录。是的 -mindepth 将有助于排除最上面的目录。