0

我是shell和东西的新手,我遇到了一个问题。我必须计算目录中有多少行文件

有了这个,我计算了 $i 中每个文件的行长:

find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2

i 是一个目录列表,上面的代码在一个 foreach 循环中,这个输出是数字,有多少行有实际文件,现在我只需要将它们相加

但我需要对目录中所有文件的长度求和

试图将该行添加到某个变量:

@ variable = (`find $i...`)

但它给了我格式错误的数字错误。

有人知道如何解决这个问题吗?我绝望了,试图做一整天,

4

1 回答 1

1

首先,该wc命令将为您添加行数,因此:

wc -l $i/* | tail -n 1

几乎会做你想做的事;不同之处在于它不会消除纯文件以外的其他内容,并且不计算名称以 . 开头的“隐藏”文件.。这个:

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1

应该做你想做的。(添加/dev/null是处理目录中没有文件的情况的技巧。)输出将类似于

    210 total

(带前导空格);您可以使用以下方法捕获号码awk

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 | awk '{print $1}'

如果您想使用 shell 自己将数字相加,应该这样做:

@ total = 0
foreach file ( `find $i -maxdepth 1 -type f` )
    @ total += `wc -l < $file`
end

尽管对于非常大的目录,您可能会遇到命令行长度的限制。

最后,我觉得有义务让您知道 csh 和 tcsh 不是编程的好 shell。它们的语法非常不规则。我已经使用它们几十年了,我仍然不得不通过反复试验来确定某个特定的构造是否可以工作。我强烈建议学习sh和/或bash代替。见这篇文章

于 2013-10-24T17:45:18.470 回答