4

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

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

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

谢谢!

4

4 回答 4

7

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
^^^^

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

于 2013-09-11T13:27:05.337 回答
1

我想监控大量文件的 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

它是单线的。

也为自己存档

于 2015-12-06T09:23:57.810 回答
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
于 2013-09-11T13:52:57.070 回答
-1

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

用法:

ls | wc -l

于 2013-09-11T13:16:30.913 回答