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.
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 -printf
Option, 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 find
Befehl 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