具有特定扩展名的文件的磁盘使用情况
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'
我想记录文件夹中所有 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'