• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

cat schreibt Text erst im 2. Anlauf (Inhalt einer Textdatei mit Incron kopieren lassen)

Vorhaben: Es sollen aus Firefox heraus Passwörter in eine zentrale Passwortdatei kopiert werden. Die Datei soll immer wieder ergänzt werden. Text aus Fx kann mit der Erweiterung 'Save text to file' kopiert werden. Die Textdatei wird in $HOME/Downloads erstellt, es wird immer eine neue Textdatei erstellt und der Name der Datei kann nur bedingt angepasst werden (Ordner geht nicht zu ändern).

Lösungsversucht: Ich lasse den DL-Ordner per Incron überwachen und immer wenn eine neue Datei erstellt wird ein Script ausführen. Incron bietet keine Möglichkeit das Script nur bei bestimmten Dateitypen oder Dateinamen ausführen zu lassen. Das Script kopiert dann den Inhalt der Textdatei in die zentrale Passwortdatei. es wird auf die von der Erweiterung erstellten Dateien angewendet.

Problem: Kopiere ich zum ersten mal Text mit der Erweiterung legt das Script die zentrale Passwortdatei zwar an, diese ist aber leer. Kopiere ich zum zweiten mal Text werden beide Textdateien in die zentrale Passwortdatei kopiert. Wenn die Datei schon existiert passiert das gleiche, die erste Textdatei wird nicht kopiert, kopiere ich zum zweiten mal Text werden beide kopiert. Das soll so nicht sein, da ich in der endgültigen Lösung logischerweise die nicht mehr benötigten Textdateien aus $HOME/Downloads löschen lassen will.

Der Eintrag in Incronsieht so aus

Code:
/home/fisch/Downloads IN_CREATE /home/fisch/Downloads/test $@/$#

Das Script sieht so aus:

Code:
#!/bin/bash
for i in /home/fisch/Downloads/000_*.txt ; do
 cat $i >> /home/fisch/passwortdatei
done

$@ steht dabei für den Pfad der Datei die das Incron-Ereignis ausgelöst hat, @# für den Dateinamen (also die neu erstellte Textdatei).

Anmerkung:
cat macht etwas komisches. Ich kann in der Erweiterung auch einstellen, dass keine neue Textdatei erstellt werden soll sondern die alte überschrieben. Grds. passiert da das gleiche wie oben beschrieben, ABER: angenommen ich kopiere erst das Wort "linux" und dann das Wort "club". Lasse ich 2 Dateien erstellen werden beide nach dem Anlegen der 2. Datei kopiert. Lasse ich die Textdatei überschreiben, sollte eigentlich "club" in die zentrale Datei geschrieben werden - es wird aber "linux" geschrieben, obwohl doe Textdatei mit diesem Inhalt eigentlich schon gelöscht sein sollte. Es sieht so aus als ob cat das irgendwie sich merkt und erst im 2. Anlauf schreibt.
 
A

Anonymous

Gast
Ich kenne incron nicht, aber das was du hier schilderst hört sich so an, als ob das Script schon gestartet wird noch bevor die Datei überhaupt fertig geschrieben ist. incron also schon losläuft wenn nur erst mal die leere Datei beim Download angelegt worden ist. Der Inhalt ist aber erst vorhanden nach einem sync bzw. komplett wenn die Datei nicht mehr zum schreiben geöffnet ist.

setze mal an den Anfang deines Scripte ein sleep 3
wenn es damit funktioniert, dann scheint meine Vermutung zuzutreffen, dann das Script so anpassen, das es erst die Datei kopiert wenn sie nicht mehr zum Schreiben geöffnet ist.

robi
 
OP
B

bunter fisch

Member
Es ging nachdem ich im Incrontab nicht mehr den ganzen Pfad an das Script übergeben habe, sondern nur noch den Dateinamen per $#. Bisher lag das Script aber auch der Einfachheit halber im gleichen Ordner. Ich muss noch testen wie es wird wenn ich das Script an anderer Stelle speichere.

Weiterhin hab ich noch das Problem, dass cat leider die neuen Texte nicht auf eine neue Zeile schreibt sondern hinter die bestehende. Wie kann ich das anders machen?Hba schon versucht \n mit zu übergeben, ändert aber nichts.

Also

Code:
cat $i >> passwortdatei \n
 
A

Anonymous

Gast
Was zu Kuckuck ist bei dir eine Passwortdatei ?

Passwörter egal für was und von wem werden nicht so einfach downgeloadet und in Dateien gespeichert oder irgendwie anderes weiterverarbeitet oder was auch immer damit oder daraus gemacht.
Passwörter sind generell verschlüsselt und in entsprechend geeigneten Formaten vor jeglichen unbefugten Zugriffen und Manipulationen geschützt zu verwaren und wenn nötig nur mit maximaler Sicherheitvorkerungen zu transportieren, (was auch den Transport von einem Rechner zum nächstem Rechner einschließt)
Wer hier schon mit vermeintlich simplen "Kinderkram"-Passwörtern nicht entsprechend sorgsam umzugehen vermag, der wird es später auch mit wichtigen Passwörtern und Zugangsdaten nie so wirklich genau nehmen egal ob es seine eigenen oder die fremder User sind.

was willst du denn cat macht genau was es soll, wenn du eine Datei als Argument angibst, dann ließt es den Inhalt der Datei aus. Wenn deine Dateien in der letzten Zeile keinen Zeilenvorschub haben, dann kann da cat auch nichts dafür, es ist nicht gedacht den Inhalt zu ändern, und sei es auch nur dort Zeilensprünge einzufügen.
Übrigends, CAT bedeutet soviel wie "concatenate files and print on the standard output"
Code:
for i in /home/fisch/Downloads/000_*.txt ; do
 cat $i >> /home/fisch/passwortdatei
done
Vor da her kannst du dir die ganze Schleife sparen,
Code:
cat /home/fisch/Downloads/000_*.txt >>  /home/fisch/passwortdatei
reicht vollkommen, und macht genau das gleiche.

robi
 
Oben