2

なぜそれが悪い考えだと思うのか教えてはいけません。それが実行可能なアイデアかどうか教えてください。

次のような名前のフォルダにファイルを作成したい:

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

電子メールアドレスで許可されている文字とUNIXシステムで許可されている文字に根本的な非互換性はありますか?

ファイル名を読み取り、末尾の「.eml」を減算し、それを「正しい」使用可能な形式に変換して、そのアドレスに電子メールを送信するbashスクリプトを作成します。

簡単なテストでは、上記を次のファイルとして保存したことが示されました。

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

5 に答える 5

8

*nix ファイル名で許可されていない唯一の文字は\0と であり/、どちらも電子メール アドレスでは許可されていません。シェルがシンボルをどのように処理するかは別の問題です。

于 2010-07-22T09:03:29.983 に答える
4

(ディレクトリ区切り文字) と ASCII 0 (文字列ターミネータ)を除いて、UNIX ファイル名で許可されていない文字はない/ため、基本的なレベルで問題はありません。

シェルスクリプトでこれらのファイル名を処理することは別の問題です。少なくともすべての変数参照を「$FILENAME」として引用符で囲む必要があり、クォータティーノを 1 つでも忘れると、非常にまれな、潜行性のバグが発生します。(また、オプションを一貫して使用しない限り、他の多くのユーティリティは|、改行などの奇妙な文字で失敗し-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

完璧に動作します;)

長い答え:

使用しているファイルシステムによって異なります。ファイル名に使用できる文字を一覧表示しているウィキペディアのエントリを参照してください。ほとんどの UNIX ファイル システムは、電子メール アドレスに含めることができるすべての文字をサポートしています。ただし、FAT などの UNIX 以外のファイルシステムでは、問題が発生する場合があります。

問題は、不適切なエスケープが原因である可能性があることに注意してください。ファイルの作成方法を確認してください。

于 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 に答える