diff und patch Datei automatisiert erkennen
diff und patch Datei automatisiert erkennen
Hallo,
gibt es eine Möglichkeit "diff" Dateien und "patch" Dateien automatisiert zu erkennen wenn die Datei Endung fehlt? Und wenn ja, wie ?
Danke
gibt es eine Möglichkeit "diff" Dateien und "patch" Dateien automatisiert zu erkennen wenn die Datei Endung fehlt? Und wenn ja, wie ?
Danke
Re: diif und patch Datei automatisiert erkennen
Code: Alles auswählen
file datei
Wenn der Header mit
jedoch fehlt, ist es halt eine gewöhnliche Text-Datei.--- ....
+++ ....
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: diif und patch Datei automatisiert erkennen
hi rendegast
mir ging es ja um eine automatisierte Erkennung ...
mir ging es ja um eine automatisierte Erkennung ...
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Re: diif und patch Datei automatisiert erkennen
Naja,
MfG Peschmä
Code: Alles auswählen
file datei | grep -qi "unified diff"
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy
Re: diif und patch Datei automatisiert erkennen
hallo und danke
kann mir einer mal bitte mit einer IF abfrage helfen für ein Script ..
als Oneliner klappt es:
Ausgabe:
j
aber als bash Abfrage bekomme ich
Ausgabe:
+ PATCHFILE='/tmp/download/*'
++ file /tmp/download/sdcc_2.9.0-5.diff
++ grep -qi unified
+ '[' '' ']'
+ echo nein
nein
kann mir einer mal bitte mit einer IF abfrage helfen für ein Script ..
als Oneliner klappt es:
Code: Alles auswählen
file /tmp/download/sdcc_2.9.0-5.diff | grep -qi "unified" && echo "j" || echo "n"
j
aber als bash Abfrage bekomme ich
Code: Alles auswählen
PATCHFILE="$BUILDDIR/download/*"
if [ "$(file $PATCHFILE | grep -qi "unified")" ]; then
echo "ja"
else
echo "nein"
fi
+ PATCHFILE='/tmp/download/*'
++ file /tmp/download/sdcc_2.9.0-5.diff
++ grep -qi unified
+ '[' '' ']'
+ echo nein
nein
Re: diif und patch Datei automatisiert erkennen
Lass' das test(1) und die Subshell weg, du willst nicht den Output vergleichen, sondern den Rueckgabewert von der Pipe bzw. grep.
Gruss Cae
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: diif und patch Datei automatisiert erkennen
1) ist dein DIFF/PATCH immer "unified diff output, ASCII text" ?
2) kannst du mir mal bitte das mit test(1) erklären .. bezieht sich das auf die [] <- Klammern ? ich bin aus "man test" nicht schlau geworden ...
2) kannst du mir mal bitte das mit test(1) erklären .. bezieht sich das auf die [] <- Klammern ? ich bin aus "man test" nicht schlau geworden ...
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Re: diif und patch Datei automatisiert erkennen
@ren22: Hatte aus Versehen bei deinem Beitrag auf den "Bearbeiten"-Knopf gedrückt, statt auf "Antworten" und dann dort drin meine Antwort formuliert. Ist noch etwas früh am Morgen hier. Eine "Rückgängig-machen" Funktion kann das Forum leider nicht. Ich bitte um Entschuldigung für die unabsichtliche Verstümmelung deines Posts, die Fragen ansich habe ich zumindest intakt gelassen
Das macht eigentlich jeder so; das -u gibt ein paar Zeilen Kontext mit, so dass patch das einerseits robuster anwenden kann und andererseits das Ding auch einigermassen Menschenlesbar wird...
Ein nicht-unified diff kannst du nicht so einfach erkennen; das wird von file nur als ASCII-Text erkannt; da könnte man sich natürlich was basteln mit grep und so, die Frage ist nur wie robust das dann wird...
d.h. die beiden Zeilen sind praktisch gleichwertig:
Test gibt einen Rückgabewert, wenn der 0 ist dann fällst du in den "true"-branch deiner if-Bedingung; sonst nicht. Statt test kannst du aber natürlich jedes andere Programm verwenden, so z.B. grep, was den Rückgabewert 0 liefert wenn der gesuchte Text gefunden wurde; falls nicht ist der Rückgabewert was anderes.
Das einzig verwirrende daran ist wohl, dass fast alle if-Aufrufe mit Test gekoppelt sind und somit der (falsche) Eindruck entstehen kann, dass ein if in bash/sh immer mit [ ] zusammen erscheinen muss.
MfG Peschmä
Ein valider Punkt. Ein diff ist nur ein "unified diff", wenn du es mit -u als Parameter erstellt hast; typischerweise benutzt man sowas: diff -Naur file1 file2 > patch.1) ist dein DIFF/PATCH immer "unified diff output, ASCII text" ?
Das macht eigentlich jeder so; das -u gibt ein paar Zeilen Kontext mit, so dass patch das einerseits robuster anwenden kann und andererseits das Ding auch einigermassen Menschenlesbar wird...
Ein nicht-unified diff kannst du nicht so einfach erkennen; das wird von file nur als ASCII-Text erkannt; da könnte man sich natürlich was basteln mit grep und so, die Frage ist nur wie robust das dann wird...
test(1) ist ein kleines Progrämmchen. Typischerweise verhalten sich die Klammern [] genau wie test(1); in manchen Umgebungen ist [ sogar ein Link auf das Programm test(1).2) kannst du mir mal bitte das mit test(1) erklären .. bezieht sich das auf die [] <- Klammern ? ich bin aus "man test" nicht schlau geworden ...
d.h. die beiden Zeilen sind praktisch gleichwertig:
Code: Alles auswählen
if test "asdf" = "bsdf"
if [ "asdf" = "bsdf" ]
Das einzig verwirrende daran ist wohl, dass fast alle if-Aufrufe mit Test gekoppelt sind und somit der (falsche) Eindruck entstehen kann, dass ein if in bash/sh immer mit [ ] zusammen erscheinen muss.
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy