Воспользуйтесь расширением скобок:
du -b maybehere*/{*,.[^.],.??*}
или в качестве альтернативы
du -b maybehere*/{,.[^.],..?}*
Логика этого, вероятно, не очевидна, поэтому вот объяснение:
*
соответствует всем не скрытым файлам
.[^.]
сопоставляет файлы, имена которых начинаются с одной точки, за которой не следует точка; это только 2-х символьные имена файлов в первой форме.
.??*
соответствует скрытым файлам длиной не менее 3 символов
..?*
как и выше, но второй символ должен быть точкой
Весь смысл в том, чтобы исключить жесткие ссылки на текущий и родительский каталог ( .
и ..
), но включить все обычные файлы таким образом, чтобы каждый из них был засчитан только один раз!
Например, самым простым было бы просто написать
du -b maybehere*/{.,}*
Это означает, что список содержит точку .
и «ничто» (ничто не находится между ,
и закрывается }
), поэтому все скрытые файлы (которые начинаются с точки) и все не скрытые файлы (которые начинаются с «ничего») будут совпадать. Проблема в том, что это также будет соответствовать .
и ..
, и это, скорее всего, не то, что вы хотите, поэтому мы должны как-то исключить это.
Последнее слово о расширении скобок.
Расширение скобок - это механизм, с помощью которого вы можете добавить больше файлов / строк / чего угодно в командную строку, написав меньше символов. Синтаксис {word1,word2,...}
, то есть это список строк, разделенных запятыми, который начинается {
и заканчивается на }
. bash
Руководство дает очень простой и в то же время очень распространенный пример использования:
$ echo a{b,c,d}e
abe ace ade
maybehere*/.*
и добавь к вышесказанному для всех