通常、UnixおよびLinuxでは、ファイル名(通常のファイル、ディレクトリ、リンク、デバイスファイルなど)にスペースを使用しないでください。
しかし、私はいつもそうです。内部スペースを含むファイル名の場合
- ノーチラスでは、空白文字が空白として表示されます。
- Bash 端末では、スペースを表すために使用するか、
\
ファイル名を二重引用符ペアで囲みます。 - 一部のアプリケーションファイル(Nautilus、OSでもこの機能を実行しているかどうかはわかりません)では、ファイル名のスペースが
%20
。
ファイル名にスペースを入れることはできませんか?
ファイル名のスペースを正しく使用または処理する方法は?
答え1
/
NUL と NUL を除くすべての文字と同様に、ファイル名にはスペースを使用できます。提案いいえスペースをサポートしていないソフトウェアによって誤って解釈される可能性があるため、ファイル名にスペースが使用されます。そのようなソフトウェアには欠陥があると言えます。ただし、シェルスクリプトなどのプログラミング言語を使用すると、スペースを含むファイル名が表示されたときに競合するソフトウェアを作成するのが簡単で、シェルスクリプト開発者がファイル名を使用してテストしないため、これらのエラーは目立たない傾向がありますがあると主張することもできます。シェルスクリプト。それらを。
%20
ファイル名でスペースを変更することはまれです。これは主に(Web)URLに使用されます。 URLの%エンコーディングがファイル名に表示されることもありますが、これは通常偶然です。
答え2
スペースはいご覧のとおり、ファイル名には。
「ほとんどのUNIXファイルシステム」エントリを見るとこのチャートはウィキペディアからのものです。、次のことがわかります。
すべての8ビット文字セットが許可されています。 7ビットASCIIはさまざまな8ビットセットのサブセットであり、常に8ビットバイトを使用して実装されているため、この範囲に含めることもできます。
禁止される唯一の文字は
/
および「null」です。 「Null」はゼロバイトを表しますが、テキストデータでは許可されません。
しかし、、シェルを使用したことがある場合は、一部の文字、特に*
POSIXワイルドカードが問題を引き起こす可能性があることをご存知でしょう。
「問題」をどのように定義したいかによって異なります。できる必須なので、スペース(スペース、タブ、改行など)が含まれています""
。しかし、空白が許されるので、これは避けられません。
ファイル名のスペースを正しく使用または処理する方法は?
シェル/コマンド行のコンテキストでは、ファイル名を一重引用符または二重引用符で囲みます(ただし、彼らは違うWRTその他の問題)またはエスケープされたスペースを使用してください\
。たとえば、次のようになります。
> foo my\ file\ with\ spaces\ in\ the\ name
答え3
その理由は概して歴史的です。以前は、ファイル名にスペースが使用できなかったため、スペースはキーワード/ファイル名の区切り文字として使用されていました。将来のシェルインタプリタは以前のスクリプトと逆互換する必要があるため、今日の悩みの問題に取り組んでいます。
人に対処する必要がないプロセス開発者は、スペースを完全に排除して作業をはるかに簡単にすることができます。これがAppleがすることです。 /System/Library/CoreServices/ の内容にはスペースがほとんど含まれていません。空白のプログラムはユーザーの代わりに開かれ、CamelCasedの場合は奇妙に見えます。同様のUNIX専用パスもスペースを避けます。
(多少関連する逸話:90年代半ば、Windowsドローンが「WindowsでできないことをMacでできることを教えてください。」 ->「ファイル名に12文字を使用してください」という文字を言いました。」 - > Silence。Spacesは12文字の間でも可能です
答え4
この質問に対する回答を読んで、この質問がUnixとLinuxに関するフォーラムで要求されていることを考えると、空白のファイル名に関するアドバイスは、実際にはUnixとLinuxの質問からではなく、他の文脈から来たようです。 。
他の背景の他の人がこれについてどう思うかを知るには、次の重複する質問を確認してください。
- ファイル名にスペース文字を使用しない技術的な理由は何ですか?スーパーユーザー情報
- ファイル名にスペースを使用しないでください。ソフトウェア工学について
ファイル名にスペースを避けるのに役立つことがわかりました。
- ファイル名を変数に入れるときは、正しく引用する必要があります。
foo $filename
代わりに作成する必要がありますfoo "$filename"
。場合によっては、生の文字列(String.raw
JavaScriptなど)に入れる必要があります。 - 空白の後に数字があり、ファイルがオンラインで利用可能な場合、エンコーディングによって名前が混乱します
image 1.jpg
。image%201.jpg
- バックエンドプログラマがHTTPコードを正しく処理できない場合(おそらく最初の箇条書きのため)、ユーザーがダウンロードしたときに名前だけが取得され
Product list.pdf
ますProduct
。