Мой совет - будьте проще. Не пишите целый скрипт, когда есть готовый инструмент, который уже делает то, что вам нужно.
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 globbing:
du -hs dirname*/app*/
Ваши каталоги, вероятно, не имеют таких имен, но вы даже можете запустить du -hs */*
и это будет работать - просто это может включать некоторые другие каталоги (или файлы), которые вы не хотите перечислять, в зависимости от того, насколько чистыми (незагроможденными) вы держите эти каталоги.