Ich möchte wissen, wie ich nach einem bestimmten Dateityp suchen kann: Ich habe einen SSH-Server aufgerufen und versuche, nach einer .jpg
Datei zu suchen, aber der Besitzer des Servers (mein Lehrer) hat alle Erweiterungen entfernt.
Ich habe es versucht grep -lr "JFIF"
und viele Verzeichnisse mit demselben Dateinamen gefunden. Also bin ich in ein zufälliges Verzeichnis gesprungen, das mit dem Befehl gefunden wurde , und habe versucht, den Befehl darauf grep
anzuwenden , aber das Terminal konnte nicht die gesamte Binärdatei anzeigen.cat
Außerdem strings
wird der Befehl auf dem SSH-Server blockiert. Mein Lehrer sagte, dass ich eine JPG-Datei finden muss und dass diese Datei eine Seriennummer (SN) enthält, aber ich habe keine Ahnung, wo ich sie finden kann.
Wenn ihr die SSH-Kardinalsnummern wollt, gebe ich sie euch gerne. Mein Lehrer hat jedenfalls gesagt, dass ihr file
dafür den Befehl verwenden könnt, aber ich weiß nicht, wie das geht.
Übrigens: er sagte (SN)
Antwort1
Ich werde versuchen, Ihnen einige Hinweise zu geben, damit Sie Ihre Hausaufgaben selbst lösen können.
Befolgen Sie diese Schritte:
- Lesen Sie das Handbuch,
file
indem Sie ausführenman file
. - Dann probiere es aus
file somefile
und schau, was passiert file
Versuchen Sie , mit verschiedenen Dateitypen zu arbeiten- Jetzt sollten Sie wissen, wie Sie herausfinden, ob es sich bei einer Datei um ein JPEG-Bild handelt oder nicht.
- Lesen Sie jetzt das Handbuch
find
(oder verwenden Sie Google, um herauszufinden, wie Sie damit alle Dateien in einem bestimmten Verzeichnis und allen Unterverzeichnissen finden können). - Jetzt erfahren Sie, wie Sie
-exec
die Option verwenden,find
um sie mit dem zuvor verwendetenfile
Befehl zu verbinden - Jetzt sollten Sie in der Lage sein, die Dateitypen aller Dateien im benötigten Verzeichnis herauszufinden und aufzulisten
- Lesen Sie jetzt über Pipes
|
undgrep
Befehle, um herauszufinden, wie Sie nur nach JPEG-Dateien filtern.
Antwort2
Zunächst möchte ich @incBrain und @Serg dafür danken, dass sie meine Frage nicht direkt beantwortet haben, was mir geholfen hat, viele neue Dinge zu verstehen :).
Meine Aufgabe war es, eine bestimmte .jpg
Datei zu finden, deren Erweiterung entfernt wurde. Das erste, woran ich dachte, ist.jpg
magisches ByteDas war JFIF
, und mit @incBrain Anweisungen konnte ich diesen Befehl erstellen
find / -exec file {} \; | grep "JFIF"
Diese Zeile verknüpft find
Befehl mit file
Befehl, -exec
ruft dann die Ausgabe beider find
& file
-Befehle ab und überträgt sie als Eingabe über das Pipe-Symbol |
für den grep
Befehl, wodurch nur die Dateien angezeigt werden, die JFIF
in ihrer Binärdatei, auch bekannt als , enthalten sind .jpg files
.
Mein Problem war eigentlich, eine bestimmte Seriennummer zu finden. Zuerst dachte ich, dass die Seriennummer in der Binärdatei der Datei enthalten ist, aber das war falsch, dann kam mir ein verrückter Gedanke
Oh! Warum kann ich nicht sehen, wie das Bild aussieht? Ich meine, wenn ich die Seriennummer nicht finden kann, wäre es gut, das Bild zu bekommen
und ich habe im Internet nach einer guten Möglichkeit gesucht, Dateien per SSH auf meinen Computer zu übertragen, und ich habe diesen Codeblock gefunden, der funktioniert hat!
scp [email protected]:/home/example/file.txt /Local_Directory
Ich hoffe, dass diese Antwort in Zukunft jemandem hilft :).
Antwort3
Eine mögliche Lösung könnte diese sein: Verwenden Sie , find
wodurch reguläre Dateien rekursiv aufgelistet werden ( -type f
) und file
für jede einzelne davon ein Befehl ausgeführt wird. Leiten Sie die Ausgabe um, um grep
Dateitypen herauszufiltern.
Hier möchte ich jedoch etwas Lustigeres machen; etwas Unbeholfeneres, aber Lustigeres.
$ find . -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \; | awk '/d8ff e0ff 1000 464a/{print $1}'
Wie Sie vielleicht wissen oder auch nicht, weisen die ersten 8 Bytes jeder Datei den Dateityp auf. Daher find
suchen wir mit nach allen regulären Dateien, drucken ihren Namen, führen dann aber Hexdump aus, um die ersten 8 Bytes zu extrahieren und filtern awk
nur die Dateinamen heraus, die diese ersten 8 Bytes aufweisen.
Hier ist ein kleiner Beweis:
$ hexdump -n 10 1450763029649.jpg
0000000 d8ff e0ff 1000 464a 4649
000000a
$ hexdump -C -n 10 1450763029649.jpg
00000000 ff d8 ff e0 00 10 4a 46 49 46 |......JFIF|
0000000a
Antwort4
file * | grep -i "jpeg"
Dadurch wird jede Datei im Verzeichnis durchsucht und ihr Dateityp zurückgegeben. Über die Pipe |
werden diese Ergebnisse dann von grep durchsucht, um die Datei mit dem Dateityp „jpeg“ oder im Grunde eine .jpg-Datei zu finden.