it-swarm.com.de

Wie grep ich für eine Dateierweiterung

Ich versuche gerade, ein Skript zu erstellen, das eine Eingabe durch Eingabe von grep ergibt, um zu sehen, ob etwas von einem bestimmten Dateityp ist (z. B. Zip), obwohl der Text vor dem Dateityp alles sein könnte, z

something.Zip
this.Zip
that.Zip

würde alle unter die Kategorie fallen. Ich versuche, mit einem Platzhalter für diese zu suchen, und bisher habe ich dies versucht

grep ".*.Zip"

Aber wenn ich das tue, wird es die .Zip-Dateien gut finden, aber es wird immer noch Ausgabe angezeigt, wenn nach dem .Zip zusätzliche Zeichen stehen, so dass beispielsweise .zippppppp oder .zipdsjdskjc von grep abgeholt werden. Wie kann ich jedoch verhindern, dass grep Übereinstimmungen mit zusätzlichen Zeichen nach dem .Zip anzeigt? 

14
lacrosse1991

Testen Sie das Ende der Zeile mit $ und kennzeichnen Sie den zweiten . mit einem umgekehrten Schrägstrich, sodass nur ein Punkt und kein Zeichen gefunden wird.

grep ".*\.Zip$"

ls *.Zip ist jedoch eine natürlichere Methode, wenn Sie alle .Zip-Dateien im aktuellen Verzeichnis oder find . -name "*.Zip" für alle .Zip-Dateien in den Unterverzeichnissen auflisten möchten, beginnend mit (und einschließlich) im aktuellen Verzeichnis. 

46
Chris Seymour

Versuchen Sie unter UNIX:

find . -name \*.Zip -print
14
Student

Sie müssen ein paar Dinge tun. Es sollte so aussehen:

grep '.*\.Zip$'

Sie müssen den zweiten Punkt übergehen, damit er nur mit einem Punkt übereinstimmt und nicht mit einem beliebigen Zeichen. Die Verwendung von einfachen Anführungszeichen macht die Flucht etwas einfacher.

Sie benötigen das Dollarzeichen am Ende der Zeile, um anzuzeigen, dass der "Zip" am Ende der Zeile erscheinen soll.

5
Vaughn Cato

Ich verwende dies, um eine Auflistung der Dateitypen in einem Ordner zu erhalten. 

find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su

Ausgaben zum Beispiel:

.DS_Store
.MP3
.aif
.aiff
.asd
.doc
.flac
.jpg
.m4a
.m4p
.m4r
.mp3
.pdf
.png
.txt
.wav
.wma
.Zip

BONUS: mit

find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c

Sie erhalten die Anzahl der Dateien:

    106 .DS_Store
     35 .MP3
     89 .aif
      5 .aiff
    525 .asd
      1 .doc
     60 .flac
     48 .jpg
    149 .m4a
     11 .m4p
      1 .m4r
  12844 .mp3
      1 .pdf
      5 .png
      9 .txt
    108 .wav
     44 .wma
      2 .Zip
2
index opout

Versuchen Sie: grep -o -E "(\\.([A-z])+)+"

Ich habe dies verwendet, um mehrere Erweiterungen zu erhalten. Wenn die Eingabe hello.tar.gz wäre, würde sie .tar.gz____ ausgeben. Verwenden Sie für einzelne Punkte grep -o -E "\\.([A-z])+$"____. Getestet mit Cygwin/MingW + MSYS.

2
dsrdakota

Sie können grep auch verwenden, um alle Dateien mit einer bestimmten Erweiterung zu finden:

find .|grep -e "\.gz$"

Der . steht für den aktuellen Ordner. Wenn Sie einen anderen Ordner als den aktuellen Ordner angeben möchten, ersetzen Sie einfach . durch den Pfad den Ordner . Hier ein Beispiel: Hier können Sie alle Dateien finden, die mit .gz enden und sich im Ordner/var/befinden. Log

  find /var/log/ |grep -e "\.gz$"

Die Ausgabe sieht etwa wie folgt aus:

 ✘ ⚙> find /var/log/ |grep -e "\.gz$"

/var/log//mail.log.1.gz
/var/log//mail.log.0.gz
/var/log//system.log.3.gz
/var/log//system.log.7.gz
/var/log//system.log.6.gz
/var/log//system.log.2.gz
/var/log//system.log.5.gz
/var/log//system.log.1.gz
/var/log//system.log.0.gz
/var/log//system.log.4.gz

Das $-Zeichen besagt im Wesentlichen, dass die Dateierweiterung mit gz endet

2
Stryker

Überprüfen Sie einige der anderen Antworten. Der .* ist nicht erforderlich. Wenn Sie nach einer bestimmten Dateierweiterung suchen, sollten Sie am besten -i angeben, damit die Groß- und Kleinschreibung nicht berücksichtigt wird. falls die Datei beispielsweise HELLO.Zip ist. Ich denke auch nicht, dass die Zitate notwendig sind.

grep -i \.Zip$
1
twasbrillig

Noch ein Update/Addon des obigen Beispiels:

# multi-dotted/multiple extensions
grep -oEi "(\\.([A-z0-9])+)+" file.txt

# single dotted
grep -oEi "\\.([A-z0-9])+$" file.txt

Dadurch werden Dateierweiterungen wie '.mp3' usw. erhalten.

1
browseman

Einfach machen:

grep ".*.Zip$"

Das "$" gibt das Zeilenende an

0
AaronO