Nutzen Sie die Klammererweiterung:
du -b maybehere*/{*,.[^.],.??*}
oder alternativ
du -b maybehere*/{,.[^.],..?}*
Die Logik dahinter ist wahrscheinlich nicht offensichtlich, daher hier eine Erklärung:
*
findet alle nicht versteckten Dateien
.[^.]
Sucht nach Dateien, deren Namen mit einem Punkt beginnen, gefolgt von keinem Punkt. Das sind nur 2-stellige Dateinamen in der ersten Form.
.??*
findet versteckte Dateien, die mindestens 3 Zeichen lang sind
..?*
Wie oben, aber das zweite Zeichen muss ein Punkt sein
Der springende Punkt ist, harte Links zum aktuellen und übergeordneten Verzeichnis ( .
und ..
) auszuschließen , aber alle normalen Dateien so einzuschließen, dass jede von ihnen nur einmal gezählt wird!
Am einfachsten wäre es zum Beispiel, einfach zu schreiben
du -b maybehere*/{.,}*
Dies bedeutet, dass die Liste einen Punkt .
und "nichts" enthält (nichts ist dazwischen ,
und schließt sich }
), sodass alle versteckten Dateien (die mit einem Punkt beginnen) und alle nicht versteckten Dateien (die mit "nichts" beginnen) übereinstimmen würden. Das Problem ist, dass dies auch passt .
und ..
, und das ist höchstwahrscheinlich nicht das, was Sie wollen, also müssen wir es irgendwie ausschließen.
Letztes Wort zur Klammererweiterung.
Die geschweifte Klammer ist ein Mechanismus, mit dem Sie mehr Dateien / Zeichenfolgen / was auch immer in die Befehlszeile einfügen können, indem Sie weniger Zeichen schreiben. Die Syntax lautet {word1,word2,...}
, dh es handelt sich um eine Liste von durch Kommas getrennten Zeichenfolgen, die von {
und mit beginnen und enden }
. bash
Handbuch gibt ein sehr einfaches und gleichzeitig sehr häufiges Anwendungsbeispiel:
$ echo a{b,c,d}e
abe ace ade
maybehere*/.*
und hängen Sie es für alle an