Archiv für den Monat: Dezember 2024

Dateien von einem bestimmten Tag finden

Wie findet man unter Linux eine Datei, deren Namen man nicht kennt, aber von der man weiß, an welchem Tag sie erstellt bzw. zuletzt bearbeitet wurde? Bei find gibt es u.a. die Option -mtime, aber hier muss man angeben, wie lange es her ist, dass die Datei verändert wurde. Ohne große Rechenarbeit geht es jedoch mit der Option -newer. Hier muss man eine Datei angeben, auf die sich die Suche beziehen soll. Eine solche Datei kann man leicht mit touch erstellen.

Nehmen wir also an, wir suchen eine Datei, die am 06.09.2024 erstellt wurde. Da -newer Dateien sucht, die neuer als die Referenz sind, wir aber nur Dateien mit diesem Datum finden wollen, brauchen wir zwei Referenzdateien:

touch -d 2024-09-06 reference1.txt
touch -d 2024-09-07 reference2.txt

Nun können wir suchen:

find . -xdev -newer reference1.txt -a -not -newer reference2.txt -ls 2>/dev/null | less

Wie man sieht, benötigen wir die zweite Referenz, um zu verhindern, dass auch Dateien gefunden werden, die nach dem 06.09.2024 geändert wurden. Die Option -xdev verhindert, dass wir in anderen Dateisystemen suchen, z.B. eine im Suchpfad gemountete Netzwerkfestplatte.

phpMyAdmin – Excel-CSV mit Zeilenumbrüchen importieren

Wenn man in Excel eine Tabelle als CSV exportiert, die in den Zellen Zeilenumbrüche enthält, so sind diese Zeilenumbrüche nur als Linefeeds (LF, 0x10) in der CSV enthalten. Die Datensätze (Zeilen) sind mit Windows-üblichen „Carriage Return/Linefeed“ (CRLF, 0x13 0x10) separiert.

Will man eine solche Datei per phpMyAdmin in eine Datenbank importieren, so muss man als Import-Format „CSV using LOAD DATA“ wählen und bei „Zeilen enden auf:“ statt „auto“ \r\n eintragen.

Beim einfachen Format „CSV“ funktioniert dort nur „auto“, welches auch die LFs als Datensatztrenner interpretiert und den Import fehlschlagen lässt.

Hintergrund: Bei „CSV“ wird wohl der phpMyAdmin-interne Parser benutzt, der nichts anderes als „auto“ versteht. Bei „CSV using LOAD DATA“ macht MySQL den Job, phpMyAdmin erzeugt ein SQL-Statement in der Art: LOAD DATA LOCAL INFILE '/tmp/phpFzMK4B' INTO TABLE `stoerChrono` FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;