我正在编辑 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 */*
并且它会工作 - 它可能只是包含您不想列出的一些其他目录(或文件),具体取决于您保持这些目录的干净(整洁)程度。