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

Shell 具有特定扩展名的文件的磁盘使用情况,shell,sh,Shell,Sh,我想记录文件夹中所有rpm文件的磁盘使用情况。下面的脚本列出了扩展名为.rpm的文件的磁盘使用情况 for name in $(find . -type d -maxdepth 1) do dirname=$(basename "$name") du -a $dirname/*.rpm done 但是,如果innerfolder不包含.rpm文件,则会收到错误消息 “du:无法访问`err/*.rpm':没有这样的文件或目录” 我不想避免此错误消息。我尝试了grep-v并检查了文件扩展名条件

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

for name in $(find . -type d -maxdepth 1)
do
dirname=$(basename "$name")
du -a $dirname/*.rpm 
done
但是,如果innerfolder不包含.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。

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

  • find
    -print0
    选项和
    du
    -files0 from
    选项用于避免文件名中出现空格问题
  • 正则表达式与整个路径匹配,例如
    /dir1/subdir2/rpm1.rpm
    ,而不仅仅是
    rpm1.rpm
    ,因此如果修改它,请将其考虑在内

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

  • find
    -print0
    选项和
    du
    -files0 from
    选项用于避免文件名中出现空格问题
  • 正则表达式与整个路径匹配,例如
    /dir1/subdir2/rpm1.rpm
    ,而不仅仅是
    rpm1.rpm
    ,因此如果修改它,请将其考虑在内

您甚至不需要在此处查找
,因为您只需要在当前目录中获取子目录

您可以将此简单的
用于
循环:

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

您甚至不需要在此处查找,因为您只需要在当前目录中获取子目录

您可以将此简单的
用于
循环:

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 }'
如果要查看每个文件及其使用的磁盘空间

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

你这样做很迂回

正如@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'


您好,此命令将返回count。我想列出带有空间(du)的rpm文件。不,它是匹配文件使用的磁盘空间的总和。请使用
printf“%n%k\n”
并在不使用Awk管道的情况下尝试它。我想分别列出文件和使用的磁盘空间。如果删除管道,它会列出文件大小而不显示文件名我不确定是否理解您的意思;但是我更新了答案,希望至少能把你推向正确的方向。哎呀,我的坏,
%p
不是
%n
。嗨,这个命令将返回count。我想列出带有空间(du)的rpm文件。不,它是匹配文件使用的磁盘空间的总和。请使用
printf“%n%k\n”
并在不使用Awk管道的情况下尝试它。我想分别列出文件和使用的磁盘空间。如果删除管道,它会列出文件大小而不显示文件名我不确定是否理解您的意思;但是我更新了答案,希望至少能把你推向正确的方向。哎呀,我的坏,
%p
不是
%n
。嗨,谢谢你的回复。这不适用于递归列表。我的意思是,如果一个x文件夹包含两个rpm文件,而一个y文件夹包含一个rpm文件,那么它将无法工作。它将在当前目录的所有子目录中找到
*.rpm
文件。你用的是什么shell?使用
*/*.rpm*/*/*.rpm
进入两个文件夹深度。我在gash bash和ubuntu终端中进行了检查,错误消息也来了。你也不需要
进行
循环
du-a*.rpm*/*.rpm*/*/*.rpm
Hi,谢谢回复。这不做递归列表。我的意思是,如果一个x文件夹包含两个rpm文件,而一个y文件夹包含一个rpm文件,那么它将无法工作。它将在当前目录的所有子目录中找到
*.rpm
文件。你用的是什么shell?使用
*/*.rpm*/*/*.rpm
进入两个文件夹深度。我在gash bash和ubuntu终端中进行了检查,错误消息也来了。你也不需要
进行
循环
du-a*.rpm*/*.rpm*/*/*.rpm
如何在文件夹名称以xyz开头的文件夹中递归搜索.rpm文件。如何在文件夹名称以xyz开头的文件夹中递归搜索.rpm文件。