具有特定扩展名的文件的磁盘使用情况

时间:2015-09-29 06:28:19

标签: shell sh

我想记录文件夹中所有rpm文件的磁盘使用情况。以下脚本列出了扩展名为.rpm的文件的磁盘。

for name in $(find . -type d -maxdepth 1)
do
dirname=$(basename "$name")
du -a $dirname/*.rpm 
done

但是,如果内部文件夹不包含.rpm文件,那么我收到错误消息

  

" du:无法访问`err / * .rpm':没有这样的文件或目录"

我不想避免此错误消息。我尝试了grep -v并检查文件扩展条件如下。

for name in $(find . -type d -maxdepth 1)

do
  dirname=$(basename "$name")
  count=`ls -1 dirname *.rpm 2>/dev/null | wc -l`
  if [ $count != 0 ]; then
  echo $count;  
  du -a $dirname/*.rpm 
  fi
done

但是,我无法避免错误消息。非常感谢在这方面的任何帮助。谢谢你。图片的PFA也是。enter image description here

3 个答案:

答案 0 :(得分:2)

您甚至不需要find,因为您只是在当前目录中获取子目录。

您可以使用这个简单的for循环:

for f in */*.rpm; do
   du -a "$f"
done

答案 1 :(得分:1)

find . -regex '.*\.rpm' -print0 | du --files0-from=- -a

  • -print0的{​​{1}}选项和find的{​​{1}}可以避免文件名中的空白问题
  • 正则表达式与整个路径匹配,例如--files0-from,而不仅仅是du,所以如果你修改它,请考虑到这一点

答案 2 :(得分:1)

你是以非常迂回的方式做到这一点。

正如@anubhava所指出的那样,如果您只关心当前目录的直接子目录,或者只关注两个级别,那么您在特定场景中并不需要find

如果要查找所有子目录中的所有*.rpm个文件到任意嵌套级别,我会直接使用find。如果你想要512字节的块,请使用%b而不是%k

find . -name '*.rpm' -printf '%k\n' | awk '{s+=1} END { print s }'

如果要查看每个单独的文件及其使用的磁盘空间,

find . -name '*.rpm' -printf '%k %p\n'