Um meine Erklärung zu vereinfachen, werde ich nicht über die versteckten Dateien sprechen.
Weil Ihr Befehl nicht das bedeutet, was Sie erreichen möchten.
Das * ist sehr speziell für Bash und hat nicht die Bedeutung, die Sie denken. Es ist ein Zeichen, das die Shell mit allen Dateinamen ersetzt, denen sie im aktuellen Verzeichnis entsprechen kann. Ein Beispiel:
[email protected]:~/foo$ ls
[email protected]:~/foo$ touch foo
[email protected]:~/foo$ ls
foo
[email protected]:~/foo$ ls | grep *
foo
% über dem entspricht $ ls | grep foo
[email protected]:~/foo$ touch bar
[email protected]:~/foo$ ls | grep *
% Die obige entspricht $ ls | grep bar foo
, gibt er etwas, wenn das Wort "bar" ist IN der Datei foo.
siehe da, ein Beispiel mit mehreren Dateien:
[email protected]:~/foo$ touch bar foo foobar
[email protected]:~/foo$ echo "bar" > foo
[email protected]:~/foo$ echo "bar" > foobar
[email protected]:~/foo$ ls | grep *
foo:bar
foobar:bar
, jetzt zu tun, was Sie * zu Ihrem Vorteil nutzen, können Sie erreichen wollen:
[email protected]:~/foo$ ls foo*
foo foobar
Aber wenn es ist ein Verzeichnis, das Ihrer Forschung entspricht, es wird seinen Inhalt auflisten.
[email protected]:~/foo$ mkdir foodir
[email protected]:~/foo$ for i in {0..10}; do touch "foodir/$i"; done
[email protected]:~/foo$ ls foo*
foo foobar
foodir:
0 1 10 2 3 4 5 6 7 8 9
So können Sie die Option verwenden -d dessen Inhalt nicht zur Liste:
[email protected]:~/foo$ ls -d foo*
foo foobar foodir
Aber wenn Ihre Suche komplizierter wird, kann ich nur Rat ein leistungsfähigeres Werkzeug zu benutzen, wie zum Beispiel finden.
Dieses verwendet Globbing (die * I oben erläutert)
[email protected]:~/foo$ find . -type f -name "foo*"
./foo
./foobar
Dieses verwendet regulären Ausdruck, aber das ist ein Werkzeug, das Sie brauchen ein bisschen studieren zu können, ohne dabei die Haare behandeln:
[email protected]:~/foo$ find . -type f -regex ".*/foo[^/]*$"
./foo
./foobar
ein wenig zu erklären, suchen die oben das aktuelle Verzeichnis (.) für Dateien nur (Typ f), die ein bestimmtes Muster entspricht (-regex "/foo [^ /] $").
Dieses Muster ist "alles gefolgt von Schrägstrich foo gefolgt von allem außer Schrägstrich bis zum Ende der Datei".
Weil die Shell '*' erweitert. Wenn Sie eine Liste aller Dateien erhalten möchten, die mit 'complex *' beginnen, wäre das 'ls complex *'. –
Fügen Sie ein 'echo' ein, um zu sehen, was bash mit Ihrem zweiten Befehl macht:' ls | echo grep * ' – Cyrus
Schlechter, wenn' complex_assignment_other.c' Datei enthält eine Zeile mit dem Ausdruck 'complex_assignment.c', (sagen Sie' // diese Funktion ist in der Datei complex_assignment.c' definiert) wird diese Zeile am Terminal gedruckt .. – anishsane