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