Der Dateiname wird beim Schreiben in eine CSV-Datei geteilt

Der Dateiname wird beim Schreiben in eine CSV-Datei geteilt

Ich habe ein Verzeichnis im Terminalordner. Ich verwende MobaXterm. Dieses Verzeichnis enthält eine große Anzahl von Dateien. Die Dateinamen sind lang und enthalten einige ungültige Zeichen. Ein Beispieldateiname ist„Die drei Ko-Vorsitzenden (Indonesien, Liberia, Vereinigtes Königreich) des hochrangigen Gremiums des Generalsekretärs zur Entwicklungsagenda nach 2015 – Media Stakeout-1861343067001.m4a“. Ich schreibe die Dateinamen mit der folgenden Befehlszeile in eine CSV-Datei und bisher hat es funktioniert.

dir$ find . -type f  > names.csv

Dieses Mal ist der Dateiname jedoch nicht auf eine Spalte, sondern auf mehrere Spalten aufgeteilt.

Bildbeschreibung hier eingeben

Ich möchte den vollständigen Namen nur in Spalte A. Ich möchte die ursprünglichen Dateinamen einschließlich der Kommas schreiben. Derselbe Befehl konnte die Dateinamen mit den Kommas für meine vorherigen Datensätze schreiben, nur der Unterschied war, dass diese Dateinamen kürzer waren als dieser.

Wie kann das Problem behoben werden?

Antwort1

Unter Linux verfügt GNU find über eine -printfOption, die den Dateinamen in einem bestimmten Format druckt. Um ihn in CSV zu importieren, können Sie den Dateinamen in Anführungszeichen setzen, etwa so:

find . -type f -printf '"%p"\n'

Antwort2

CSV bedeutetDurch Komma getrennte Werte. Wenn die Tabelle die Datei liest, interpretiert sie die Kommas als Feldtrennzeichen. Ersetzen Sie die Kommas durch ein anderes Trennzeichen, z. B. einen Unterstrich, mittr, also

$ tr ',' '-_' < input.csv | tr -d '"' 

Wenn Sie es importieren, wird Feld Eins nicht geteilt.

Antwort3

Es gibt verschiedene CSV-Varianten, aber eine RFC 4180-kompatible Lösung mit sed:

find . -type f | sed 's/"/""/g;s/\(.\+\)/"\1"/'

Dadurch werden Instanzen von "„with“ ersetzt ""und nicht leere Zeilen in doppelte Anführungszeichen eingeschlossen.

Antwort4

Die Dateinamenlänge hat hier keine Auswirkung, sondern das Standardtrennzeichen der Import-Engine. Wählen Sie ein Zeichen, das in Ihren Dateinamen nie verwendet wird, und verwenden Sie es als CVS-Trennzeichen. Nehmen wir an, diese Auswahl ist § (Absatzzeichen). Ihr findBefehl wäre dann:

find . -type f -printf '§%p§\n' > names.csv

oder wenn Sie den Dateinamen ohne Startpunkt erhalten möchten:

find . -type f -printf '§%P§\n' > names.csv

Geben Sie nun beim Importieren Ihrer CSV-Datei § als Trennzeichen an Bildbeschreibung hier eingeben

verwandte Informationen