我正在尝试制作一个小脚本来显示目录在磁盘上使用的总存储空间。为了弄清楚我正在使用 du 命令。但是,为了在 DU 处理一个非常大的目录时向用户提供一些反馈,我想通过管道运行输出并显示行数,因此用户还可以了解有多少文件夹和目录中有文件。这是我的代码:
du -ah | pv -l | tail -n 1 | sed 's/\.$//'
然而,尽管 pv 命令使用行,它仍然以千字节而不是行显示通过管道的总数据。有没有办法显示通过管道传输的总行数,而不是字节数。也许是一个不同的命令?
谢谢!
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
^^^^
对我来说看起来像线条(如,它按预期工作)?
我想监控大量文件的 MP3 转换。这对我有帮助,希望对研究人员有帮助:
$ find . -type f | grep "wav$" |
while read f; do
ffmpeg -loglevel panic -n -i "$f" -codec:a libmp3lame -qscale:a 1 "${f%.wav}.mp3";
echo "OK.";
done |
pv -l -s `find . -type f | grep "wav$" | wc -l` > /dev/null
它是单线的。
也为自己存档
尝试这个:
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
您可以使用 wc(字数)命令来获取行数
用法:
ls | wc -l