2016-08-02 4 views
1

Я пытаюсь создать txt со всеми папками, которые не пусты.Bash - export txt со специальными символами

Проблема заключается в том, что название этих папок имеют «специальные символы», так что вместо того, чтобы перечислить «Comeco» экономит «Começo» (в качестве примера)

Я читал о Iconv, но из того, что я прочитал, это «конвертер», и я не хочу «конвертировать» файлы, я хочу сохранить их в правильной форме без преобразования после.

+0

Под" экспортировать TXT со всеми папки ... "вы имеете в виду" сгенерировать текстовый файл с именами всех папок ... "? Кроме того, мы говорим об Linux, нет? – leonbloy

+0

И да, вы хотите преобразовать файл, а именно текстовый файл, содержащий все эти имена. – Siguza

+0

@leonbloy Да, сгенерируйте txt-файл со всеми непустыми папками в каталоге. – blocnt

ответ

2

Не должно быть никаких проблем. Имя файла в Linux - это всего лишь массив bytes, они не интерпретируются как текст (т.е. декодируются), если это необходимо. И в вашем случае это не так.

Например

[[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 

Мы можем вывести из od вывод, что, потому что мой Linux сессия была UTF-8 локали кодировку, имя файла внутренне представлен с UTF-8 кодирования (7 байт).

Важно понять, что команды, как ls и find просто плюет, что последовательность байтов без «декодирования» их как текст, это просто работа консоли (в моем случае, в UTF-8, так что я их вижу ОК). То же самое можно сказать о сгенерированном файле list.txt, внутри него мы имеем только сырые байты, соответствующие именам файлов. И, опять же, я вижу их в порядке, когда я это cat, потому что (и только потому) моя консоль имеет правильную кодировку (UTF-8).

Только если я попытаюсь увидеть файл в другой среде, консоль с другим языковым стандартом или текстовым редактором, который читает его как ISO-8859-1 или другую кодировку, я увижу «странные символы "

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

(После установки моей консоли кодировку ISO-8859-1 - в моем случае, Konsole-> Settings-> Изменить профиль -> Дополнительно -> кодирование)

+0

Спасибо за объяснение :) – blocnt

Смежные вопросы