我正在尝试创建一个小脚本,向我显示目录在磁盘上使用的总存储空间。为了解决这个问题,我正在使用du命令。但是,为了在DU在一个非常大的目录上工作时向用户提供一些反馈,我想通过管道运行输出并显示行数,这样用户也可以了解有多少文件夹和目录中有文件。这是我的代码:
du -ah | pv -l | tail -n 1 | sed 's/\.$//'
但是,尽管pv命令使用了行,但它仍然以千字节而不是行显示通过管道的总数据。有没有办法显示通过管道传输的总行数,而不是字节数。也许是一个不同的命令?
谢谢!
答案 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>