我想记录文件夹中所有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
答案 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'