Создание файлов в среде * nix с адресом электронной почты в качестве имени - PullRequest
2 голосов
/ 22 июля 2010

ПОЖАЛУЙСТА, не говорите мне, почему вы думаете, что это плохая идея. Просто скажите мне, если это осуществимая идея.

Я хочу создать файлы в папке с такими именами:

asdf@qwerty.com.eml
abc+def@asdf.net.eml
abc_def@sasdf.at.eml

Есть ли принципиальная несовместимость символов, разрешенных в адресах электронной почты, и символов, разрешенных системой Unix?

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

Простой тест показал, что он сохранил вышеуказанное в виде файлов с именем

asdf\@qwerty.com.eml
abc+def\@asdf.net.eml
abc_def\@sasdf.at.eml

Ответы [ 5 ]

8 голосов
/ 22 июля 2010

Единственными символами, которые не допускаются в имени файла * nix, являются \0 и /, ни один из которых в любом случае не разрешен в адресе электронной почты.Как ваша оболочка может обрабатывать символы - другое дело.

4 голосов
/ 22 июля 2010

В именах файлов UNIX запрещены символы , не , кроме / (разделитель каталогов) и ASCII 0 (ограничитель строки), поэтому на фундаментальном уровне проблем нет.

Обработка этих имен файлов в сценариях оболочки - это другое дело; для этого требуется по крайней мере заключить в кавычки каждую ссылку на переменную как «$ FILENAME», а если забыть хотя бы одно quatatino, возникнет очень редкая, коварная ошибка. (Кроме того, многие другие утилиты не будут работать со странными символами, такими как | или символ новой строки, если вы постоянно не используете опцию -0.)

Так что да, технически ваша плохая идея выполнима: -)

3 голосов
/ 22 июля 2010

Краткий ответ:

przemek@linux-634b:~/tmp/email> touch john.smith@example.com
przemek@linux-634b:~/tmp/email> ls
john.smith@example.com

Прекрасно работает;)

Длинный ответ:

Зависит от файловой системывы используетеСм. Запись в Википедии , в которой перечислены разрешенные символы в именах файлов.Большинство файловых систем UNIX поддерживают все символы, которые могут быть включены в адреса электронной почты.Однако файловые системы не UNIX, такие как FAT, могут вызывать проблемы.

Обратите внимание, что ваши проблемы могут возникнуть из-за неправильного побега.Проверьте, как вы создаете свои файлы.

2 голосов
/ 22 июля 2010

Каким был ваш "простой тест"?

Набираете abc и нажимаете вкладку?Автозаполнение bash добавит \ перед каждым специальным символом.Но это не значит, что оно хранится с \ в его имени.

Используйте ls, чтобы увидеть истинное имя.

0 голосов
/ 22 июля 2010

Нет проблем с такими именами файлов в системах, которые обрабатывают имена файлов как большие двоичные объекты и разрешают все последовательности байтов, то есть в Linux. Но они не переносимы на системы, которые обрабатывают имена файлов как строки Unicode и запрещают определенные символы (Windows) или преобразуют имена файлов (Mac OS X, каноническая декомпозиция).

...