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

Disk usage of a file with specific extension

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

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

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

"du: cannot access `err/*.rpm': No such file or directory" .

我不想回避这个错误信息。我尝试了 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

但是,我无法避免错误消息。在这方面的任何帮助都大大 appreciated.Thanks 提前。图片的PFA也是。

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

  • find-print0 选项和 du--files0-from 选项是为了避免文件名中的空格问题
  • 正则表达式匹配整个路径,例如./dir1/subdir2/rpm1.rpm,不只是 rpm1.rpm,所以如果您修改它,请将其考虑在内

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

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

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

你这样做很迂回。

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

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

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

如果您想查看每个单独的文件及其使用的磁盘 space,

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