请不要告诉我为什么你认为这是一个坏主意。告诉我它是否是一个可行的想法。
我想在名称如下的文件夹中创建文件:
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
答案 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,规范分解)的系统。