2

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

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

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
4

5 回答 5

8

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

于 2010-07-22T09:03:29.983 回答
4

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

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

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

于 2010-07-22T09:04:07.953 回答
3

简短的回答:

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

完美运行;)

长答案:

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

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

于 2010-07-22T09:01:06.823 回答
2

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

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

使用 ls 查看真实姓名。

于 2010-07-22T09:06:42.990 回答
0

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

于 2010-07-22T09:06:41.953 回答