Wie werden die versteckten Dateien in den angegebenen Verzeichnissen abgeglichen?
beispielsweise
Wenn ich den folgenden Befehl gebe, gibt es nicht das Ergebnis der versteckten Dateien,
du -b maybehere*/*
wie man dies einfach mit einem einzigen Befehl anstatt mit erreicht
du -b maybehere*/.* maybehere*/*
da muss ich vielleicht zweimal tippen.
maybehere*/.*
und hängen Sie es für alle anAntworten:
Nutzen Sie die Klammererweiterung:
oder alternativ
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 seinDer 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
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:quelle
{ }
Ich habe keine Ahnung :(man bash
Kapitel " Klammererweiterung " an..??*
stimmt nicht überein.a
,.b
....[^.]*
stimmt nicht überein..foo
..foo
passt zu beiden.[^.]*
und.??*
. Sie möchten{.[!.],..?,}*
.Da Sie bereits GNU-spezifische Syntax (
-b
) verwenden:Auf diese Weise werden
du
die Dateien in denmaybehere*
Verzeichnissen aufgelistet (und Punktdateien werden nicht ausgeschlossen).-d1
Beschränkt die Berichterstattung über die Datenträgernutzung auf eine Ebene nach unten (einschließlich Nichtverzeichnisse mit-a
).Andernfalls hat jede Shell ihre eigene Syntax , damit Globs versteckte Dateien (außer
.
und..
) enthalten:zsh
:ksh93
:bash
:tcsh
:yash
:Vorsicht, es enthält
.
und..
auf Systemen, die sie enthaltenreaddir()
, wodurch es kaum verwendbar ist.quelle
Eine andere Option ist hier verfügbar :
quelle
..
?../
und darunter auflisten wollen ...myfile
; dafür hinzufügen..?*
. Aber +1 für die Verwendung der richtigen Glob-Syntax für negative Übereinstimmungen.Wenn Sie nur versteckte Verzeichnisse auflisten oder versteckte Verzeichnisse bearbeiten möchten, können Sie, wie Costas sagte, verwenden
du -b maybehere*/.*
Auf diese Weise können Sie versteckte Dateien und Verzeichnisse bearbeiten. Wenn Sie nur versteckte Verzeichnisse möchten, können Sie dies mit angeben
du -b maybehere*/.*/
quelle
maybehere*/.*
maybehere*/*
du -b
nimmt sowohl versteckte als auch nicht versteckte auf.Sie können find zwar nicht direkt schälen, aber mit dieser eingeschränkten Tiefe verwenden
quelle