Profitez de l'expansion de l'accolade:
du -b maybehere*/{*,.[^.],.??*}
Ou bien
du -b maybehere*/{,.[^.],..?}*
La logique derrière cela n'est probablement pas évidente, alors voici l'explication:
*
correspond à tous les fichiers non masqués
.[^.]
correspond aux fichiers dont les noms commencent par un seul point suivi d'un pas de point; qui ne sont que 2 noms de fichiers de caractères dans le premier formulaire.
.??*
correspond aux fichiers cachés qui contiennent au moins 3 caractères
..?*
comme ci-dessus, mais le deuxième caractère doit être un point
Le but est d'exclure les liens durs vers le répertoire courant et parent ( .
et ..
), mais d' inclure tous les fichiers normaux de telle manière que chacun d'eux ne sera compté qu'une seule fois!
Par exemple, le plus simple serait d'écrire simplement
du -b maybehere*/{.,}*
Cela signifie que la liste contient un point .
et "rien" (rien n'est entre ,
et se fermant }
), donc tous les fichiers cachés (qui commencent à partir d'un point) et tous les fichiers non cachés (qui partent de "rien") correspondraient. Le problème est que cela correspondrait également .
et ..
, et ce n'est probablement pas ce que vous voulez, nous devons donc l'exclure d'une manière ou d'une autre.
Un dernier mot sur l'expansion de l'accolade.
L'expansion d'accolade est un mécanisme par lequel vous pouvez inclure plus de fichiers / chaînes / quoi que ce soit sur la ligne de commande en écrivant moins de caractères. La syntaxe est {word1,word2,...}
, c'est-à-dire qu'il s'agit d'une liste de chaînes séparées par des virgules qui commence {
et se termine par }
. bash
manuel donne un exemple d'utilisation très basique et en même temps très courant:
$ echo a{b,c,d}e
abe ace ade
maybehere*/.*
et ajoutez à ci-dessus pour tous