2016-08-02 24 views
1

Ich versuche, einen TXT mit allen Ordnern, die nicht leer sind, zu generieren.Bash - Export TXT mit Sonderzeichen

Das Problem ist, dass der Name dieser Ordner haben „Sonderzeichen“, so anstelle von „Começo“ Auflistung ist „Começo“ (als Beispiel)

Ich habe gelesen, über iconv zu speichern, aber von dem, was ich lese, ist dies ein "Conversor", und ich will keine Dateien "konvertieren", ich möchte sie in der richtigen Form speichern, ohne danach zu konvertieren.

find /SubFolder/* -type d -not -empty -exec bash -c 'echo ${0#/Folder/}' {} \; > /Folder/NotEmpty.txt 
+0

mit" exportieren Sie eine txt mit allen Ordner ... "Sie meinen" eine Textdatei mit den Dateinamen aller Ordner erzeugen ... "? Außerdem sprechen wir von Linux, nicht? – leonbloy

+0

Und ja, Sie möchten eine Datei konvertieren, nämlich die Textdatei, die all diese Namen enthält. – Siguza

+0

@leonbloy Ja, erzeuge eine TXT-Datei mit allen nicht leeren Ordnern in einem Verzeichnis. – blocnt

Antwort

2

Es sollte kein Problem geben. Ein Dateiname in Linux ist nur ein Array von bytes, sie werden nicht als Text interpretiert (dh entschlüsselt), außer es ist notwendig. Und in deinem Fall sind sie nicht.

Eg

[[email protected] t]$ ls 
Começo xx 
[[email protected] t]$find . -type d 
. 
./Começo 
./xx 
[[email protected] t]$ find . -type d -exec bash -c 'echo ${0#/Folder/}' {} \; 
. 
./Começo 
./xx 
[[email protected] t]$ find . -type d -exec bash -c 'echo ${0#/Folder/}' {} \; > list.txt 
[[email protected] t]$ cat list.txt 
. 
./Começo 
./xx 
[[email protected] t]$ od -c list.txt 
0000000 . \n . / C o m e 303 247 o \n . / x x 
0000020 \n 
0000021 

Wir folgern können, aus od Ausgabe, dass, weil meine Linux-Sitzung eine UTF-8-Codierung locale hatte, der Dateiname intern mit UTF-8-Codierung (7 Byte) dargestellt wurde.

Es ist wichtig zu verstehen, dass Befehle wie ls und find nur diese Sequenz von Bytes spuckt ohne „Decodierung“, um sie als Text, das ist nur die Arbeit der Konsole (was in meinem Fall in in UTF-8, so dass ich sie sehe OK). Dasselbe gilt für die erzeugte Datei list.txt, in der wir nur die rohen Bytes haben, die den Dateinamen entsprechen. Und wieder sehe ich sie OK wenn ich cat es, weil (und nur weil) meine Konsole die richtige Codierung (UTF-8) hat.

Nur wenn ich versuche, die Datei in einem anderen Umfeld, einer Konsole mit einem anderen Gebietsschema oder einem Textbetrachter-Editor zu sehen, der versucht, sie als ISO-8859-1 oder eine andere Kodierung zu lesen, sehe ich die "seltsamen Zeichen" "

[[email protected] t]$ cat list.txt 
. 
./Começo 
./xx 

(nach meiner Konsole Kodierung ISO-8859-1 Einstellung - in meinem Fall, Konsole-> Einstellungen-> Profil bearbeiten -> Erweitert -> Encoding)

+0

Vielen Dank für Ihre Erklärung :) – blocnt