使用PV对行进行计数并显示总行数,而不是管道中的总字节数

时间:2013-09-11 06:59:58

标签: linux bash unix pipe

我正在尝试创建一个小脚本,向我显示目录在磁盘上使用的总存储空间。为了解决这个问题,我正在使用du命令。但是,为了在DU在一个非常大的目录上工作时向用户提供一些反馈,我想通过管道运行输出并显示行数,这样用户也可以了解有多少文件夹和目录中有文件。这是我的代码:

du -ah | pv -l | tail -n 1 | sed 's/\.$//'

但是,尽管pv命令使用了行,但它仍然以千字节而不是行显示通过管道的总数据。有没有办法显示通过管道传输的总行数,而不是字节数。也许是一个不同的命令?

谢谢!

4 个答案:

答案 0 :(得分:5)

du附带-s标记,仅显示总数,因此只需执行以下操作:相反:

$ du -sh /tmp | cut -f1
4.9M

关于pv

  

但是,虽然pv命令使用了行,但它仍然以千字节而不是行显示通过管道的总数据。

你确定吗?

$ find /tmp/ | pv >/dev/null
44.6kiB 0:00:00 [3.19MiB/s] [   <=>  
^^^^^^^

$ find /tmp/ | pv -l >/dev/null
1.24k 0:00:00 [86.5k/s] [   <=>  
^^^^^

$ find /tmp/ | wc -l
1237
^^^^

看起来像我的线(如,它按预期工作)?

答案 1 :(得分:1)

我想监控大量文件的MP3转换。这对我有所帮助,希望能帮助研究人员解决这个问题:

{{1}}

这是一个单行。

还为我自己存档

答案 2 :(得分:0)

试试这个:

a=`find . -iname -prune -o -type f -print` 
c=`printf "%b\n" "$a" | du -ah`
echo "Displaying all the files on your machine with respect to their size********************************************"
printf "%b\n" "$c" | sed '$d'
echo "Finished displaying********************************************"
echo ""
b=`find . -iname -prune -o -type f -print | du -ah | wc -l`
echo "Total number of files exist on your machine is:" $b
totalSize=`printf "%b\n" "$c" | tail -1`
echo ""
echo "Total number of space occupied on disk in KB" $totalSize

答案 3 :(得分:-1)

您可以使用wc(字数统计)命令来获取行数

用法:

ls | wc -l <​​/ p>