for 循环评估多个目录并执行命令

for 循环评估多个目录并执行命令

我正在编辑 shell 脚本,我想知道如何使用 for 使用列表或变量列出的所有目录,然后执行命令。

例子:

我有这个目录:

/dirname1/app1
/dirname1/app2
/dirname2/app1
/dirname2/app2

问题是每个目录都有 8 个应用程序目录,我需要使用 du 获取每个应用程序目录的值以了解每个目录的使用情况。

我有我制作的这段示例代码,但我想将其转换得比实际情况更好。

#!/bin/ksh

#files="/dev /etc"
inc=1

for f in /*;
do
vari=`du -ksh $f`
        [ -d $f ]

echo "The value of each one is: ------ : $((inc++)): $vari"
done;

echo "Execution Done."
exit 0

我希望此事能够得到澄清

答案1

我的建议是让事情变得简单。 当有一个现成的工具已经可以完成您想要的操作时,不要编写整个脚本。

du是报告磁盘使用情况的工具,也是find查找文件的工具。一起使用它们。

find dirname* -mindepth 1 -maxdepth 1 -type d -exec du -hs {} \;

-maxdepth-mindepth是 GNU 扩展;要便携地处理这个问题,您需要一个稍微复杂的命令,如下所述:

在这种情况下的命令可以是

find dirname* -path '*/*' -prune -type d -exec du -hs {} \;

或者,如果您的所有dirname*目录都在其中,topdirectory并且其中没有其他目录,请使用:

find topdirectory -path '*/*/*' -prune -type d -exec du -hs {} \;

这只会报告 内目录中的目录topdirectory,这似乎就是您所要求的。


更新:我又看了一遍,实际上,您可以完全使用 shell 通配符来完成您需要的操作:

du -hs dirname*/app*/

您的目录实际上可能不是这样命名的,但您甚至可以运行du -hs */*并且它会工作 - 它可能只是包含您不想列出的一些其他目录(或文件),具体取决于您保持这些目录的干净(整洁)程度。

相关内容