在* nix环境中创建文件,并以电子邮件地址作为名称

时间:2010-07-22 08:55:59

标签: bash email unix shell email-validation

请不要告诉我为什么你认为这是一个坏主意。告诉我它是否是一个可行的想法。

我想在名称如下的文件夹中创建文件:

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 个答案:

答案 0 :(得分:8)

* nix文件名中不允许的唯一字符是\0/,无论如何都不允许在电子邮件地址中使用。你的shell如何处理符号是另一回事。

答案 1 :(得分:4)

除了/(目录分隔符)和ASCII 0(字符串终结符)之外,UNIX文件名中不允许使用 no 字符,因此在基本级别上没有问题。

在shell脚本中处理这些文件名是另一回事;它要求至少引用每个变量引用为“$ FILENAME”,并且忘记一个quotatino将会创建一个非常罕见的,阴险的bug。 (此外,除非您始终使用|选项,否则许多其他实用程序将在-0或换行符等奇怪字符上失败。)

所以是的,技术上你的坏主意是可行的: - )

答案 2 :(得分:3)

简答:

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

完美地运作;)

答案很长:

这取决于您正在使用的文件系统。请参阅Wikipedia entry,其中列出了文件名中允许的字符。大多数UNIX文件系统都支持可以包含在电子邮件地址中的所有字符。但是,非UNIX文件系统(如FAT)可能会导致问题。

请注意,您的问题可能来自不正确的转义。检查您是如何创建文件的。

答案 3 :(得分:2)

你的“简单测试”是什么?

键入abc并点击标签? bash自动完成将在每个特殊字符之前添加\。 但这并不意味着,它以名称存储\。

使用ls查看真实姓名。

答案 4 :(得分:0)

在将文件名视为blob并允许所有字节序列(即Linux)的系统上,此类文件名没有问题。但它们不能移植到将文件名视为Unicode字符串并且禁止某些字符(Windows)或转换文件名(Mac OS X,规范分解)的系统。