Linuxで特殊文字を含むファイルを作成する方法
私たちはファイルやフォルダ名に非常に頻繁に出くわします。ほとんどの場合、ファイル/フォルダ名はそのファイル/フォルダの内容に関連しており、数字や文字で始まります。
アルファベットと数字のファイル名は非常に一般的で広く使用されていますが、特別な文字を含むファイルやフォルダーの名前を扱う場合にはそうではありません。
注意: どんな種類のファイルも扱えますが、簡単さと実装の容易さのために、この記事ではテキストファイル (.txt) を扱います。
Linuxで最も一般的なファイル名
一般的なファイル名の例は次のとおりです:
abc.txt
avi.txt
debian.txt
...
数値ファイル名の例は次のとおりです:
121.txt
3221.txt
674659.txt
...
アルファベットと数字を組み合わせたファイル名の例は次のとおりです:
eg84235.txt
3kf43nl2.txt
2323ddw.txt
...
特殊文字が含まれていてあまり一般的ではないファイル名の例:
#232.txt
#bkf.txt
#bjsd3469.txt
#121nkfd.txt
-2232.txt
-fbjdew.txt
-gi32kj.txt
--321.txt
--bk34.txt
...
ここで最も明白な質問の一つは、ハッシュ記号 (#)、セミコロン (;)、ダッシュ (-)、あるいはその他の特殊文字を持つファイルやフォルダ名を一体誰が作成または処理するのかということです。
私はあなたに同意します。そのようなファイル名は一般的ではありませんが、シェルはそのようなファイル名を扱うときにクラッシュしたり諦めたりするべきではありません。また、技術的に言えば、フォルダー、ドライバー、またはその他のものはすべてLinuxではファイルとして扱われます。
Linuxの破線付きファイル名
Linuxでは、ダッシュ("-")で始まるファイル名はしばしば「ダッシュ付きファイル名」や「ハイフン付きファイル名」と呼ばれます。これらのファイル名は、先頭のダッシュがオプションとして誤解されたり、コマンドラインユーティリティによってフラグを立てられたりするため、扱う際に問題を引き起こすことがあります。
Linuxでダッシュ付きファイルを作成する
Linuxでダッシュ付きのファイル名を扱うには、まず、タッチコマンドを使用してダッシュ(-)で始まるファイル、例えば-abx.txtを作成します。
$ touch -abc.txt
サンプル出力:
touch: invalid option -- 'b'
Try 'touch --help' for more information.
上記のエラーの理由は、シェルがダッシュ (-) の後のものをオプションとして解釈するためであり、明らかにそのようなオプションは存在しないため、エラーが発生します。
そのようなエラーを解決するためには、特別な文字(ここではダッシュ)の後にあるものをオプションとして解釈しないようにbashシェルに指示する必要があります。
このエラーを解決する方法は二つあります。
$ touch -- -abc.txt [Option #1]
touch ./-abc.txt [Option #2]
作成されたファイルは、上記の2つの方法で、コマンドlsまたは長いリスト表示のためにls -lを実行することで確認できます。
$ ls -l
total 0
.rw-rw-r-- tecmint tecmint 0 B Tue Jun 20 10:32:43 2023 -abc.txt
Linuxでダッシュ付きファイルを編集する
ダッシュ付きのファイル名のファイルを編集するには、利用可能なさまざまなテキストエディタを使用できます。ここでは、nanoテキストエディタを使用した例を示します:
$ nano -- -abc.txt
or
nano ./-abc.txt
nanoをお好みの他のエディタに置き換えることができます。例えば、以下のようにvimエディタを使用します:
$ vim -- -abc.txt
or
vim ./-abc.txt
Linuxでダッシュ付きファイルの名前を変更する
ハイフンのあるファイル名でファイルをリネームするには、以下のようにmvコマンドを使用できます。
例えば、「-abc.txt」という名前のファイルを「-a.txt」に変更するには、次のようにします:
$ mv -- -abc.txt -a.txt
OR
mv ./-abc.txt ./-a.txt
Linuxでダッシュ付きファイルを削除する
ハイフン付きのファイル名を持つファイルを削除するには、次のようにrmコマンドを使用できます。
$ rm -- -abc.txt
OR
rm ./-abc.txt
フォルダー内にダッシュを含む多数のファイルがあり、それらを一度にすべて削除したい場合は、次のようにします:
$ rm ./-*
上記で説明したのと同じルールが、ファイル名におけるハイフンの数とその出現に対しても適用されます。例えば、-a-b-c.txt、ab-c.txt、abc-.txt などです。
上で述べたのと同じルールが、ハイフンが任意の数存在するフォルダー名にも適用されます。ただし、フォルダーを削除するには、次のように「rm -rf」を使用しなければなりません。
$ rm -rf -- -abc
or
rm -rf ./-abc
Linuxのハッシュされたファイル名
Linuxでは、「#」文字はファイル名において特定の目的に制限されていません。ファイル名で「#」文字を他の英数字と同様に使用できます。
ただし、「#」などの特別な文字は、特定の文脈や特定のコマンドやユーティリティと一緒に使用する場合に特別な意味を持つことを言及する価値があります。
例えば、"#" 文字は、シェルスクリプトでコメントを示すためによく使用されます。シェルスクリプトを書いていて、ファイル名に "#" 文字を含めたい場合は、コメントとして誤って解釈されないように、ファイル名を適切にエスケープまたは引用することをお勧めします。
Linuxでハッシュファイルを作成する
ファイル名に「#」文字を使ってファイルを作成する例は次のとおりです:
$ touch #abc.txt
サンプル出力:
touch: missing file operand
Try 'touch --help' for more information.
上記のエラーの理由は、bashが#abc.txtをコメントとして解釈しているため、無視されていることです。そのため、touchコマンドはファイルオペランドなしで実行されており、それがエラーの原因となっています。
そのようなエラーを解決するために、bashに#をコメントとして解釈しないように依頼することができます。
$ touch ./#abc.txt
or
touch '#abc.txt'
そして、作成されたファイルを次のように確認します:
$ ls -l
.rw-rw-r-- tecmint tecmint 0 B Tue Jun 20 11:11:00 2023 #abc.txt
今、最初以外のどこかに#を含む名前のファイルを作成してください。
$ touch ./a#bc.txt
touch ./abc#.txt
or
touch 'a#bc.txt'
touch 'abc#.txt'
同時に2つのファイル(例えばaと#bc)を作成すると、何が起こるか:
$ touch a.txt #bc.txt
上記の例から明らかなように、ファイル「a」のみが作成され、ファイル「#bc」は無視されました。上記の状況を成功裏に実行するために、次のことができます。
$ touch a.txt ./#bc.txt
or
touch a.txt '#bc.txt'
最後に、lsコマンドを使用して作成したファイルを確認してください。
$ ls -l
Linuxでハッシュファイルの名前を変更またはコピーする
ハッシュファイルの名前を変更するには、次のようにmvコマンドを使用できます。
$ mv ./#bc.txt ./#cd.txt
or
mv '#bc.txt' '#cd.txt'
ハッシュファイルをコピーするには、以下のようにcpコマンドを使用できます。
$ cp ./#cd.txt ./#de.txt
or
cp '#cd.txt' '#de.txt'
Linuxでハッシュファイルを編集または削除する
ハッシュファイルを編集するには、nano または vim エディタを使用できます。
$ vi ./#cd.txt
or
vi '#cd.txt'
$ nano ./#cd.txt
or
nano '#cd.txt'
ハッシュファイルを削除するには、次のように rm コマンドを使用できます。
$ rm ./#bc.txt
or
rm '#bc.txt'
ファイル名にハッシュ (#) が含まれているすべてのファイルを削除するには、次のコマンドを使用できます:
$ rm ./#*
Linuxのセミコロンファイル名
ご存じないかもしれませんが、セミコロンはBASHや他のシェルでもコマンドの区切りとして機能します。セミコロンを使うことで、いくつかのコマンドを一度に実行することができ、区切りとして働きます。セミコロンを含むファイル名を扱ったことがありますか?もしないのであれば、ここで経験することになるでしょう。
セミコロンが含まれるファイルを作成します。
$ touch ;abc.txt
サンプル出力:
touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found
上記のエラーの理由は、上記のコマンドを実行すると、BASH が touch をコマンドとして解釈するが、セミコロンの前にファイルオペランドが見つからなかったため、エラーを報告することです。
また、セミコロンの後にBASHが別のコマンドを期待しているため、‘abc.txt‘コマンドが見つからないという別のエラーも報告されています。‘abc.txt‘はコマンドではありません。
そのようなエラーを解決するために、BASHにセミコロンをコマンドの区切りとして解釈しないように指示してください。
$ touch ./';abc.txt'
or
touch ';abc.txt'
注意: ファイル名は単一引用符 '' で囲まれています。これにより、BASHは ; がコマンド区切りではなくファイル名の一部であることを示します。
名前にセミコロンが含まれているファイルやフォルダーに対する残りのアクション(すなわち、コピー、移動、削除)は、その名前をシングルクォートで囲むことで簡単に実行できます。
Linuxにおけるファイル名のスペシャルキャラクター
Linuxでは、ファイル名にはほとんどの特殊文字を含めることができ、空白、ドット、ダッシュ、アンダースコア、さらには@、!、$、および%のような記号も含まれます。
ファイル名で使用する際に注意して使用するか、エスケープを検討すべき特殊文字のリストです:
ファイル名のプラス記号 (+)
Linuxでプラス記号(+)のファイルを作成するには、touchコマンドと、ファイル名をシングルクォートで囲んで使用できます。
touch '+ravi.txt'
ファイル名にドル記号 ($)
Linuxでドル記号 ($) のファイルを作成するには、touch コマンドを使用し、ファイル名をシングルクォートで囲みます。
touch '$ravi.txt'
ファイル名のパーセント (%)
Linuxでパーセント記号(%)ファイルを作成するには、次のようにします。
touch '%ravi.txt'
ファイル名のアスタリスク (*)
Linuxでアスタリスク記号(*)のファイルを作成するには、次のようにします。
$ touch '*ravi.txt'
注意: *で始まるファイルを削除する必要がある場合、そのようなファイルを削除するために以下のコマンドを使用しないでください。
$ rm *
or
rm -rf *
代わりに、使用してください、
$ rm ./*.txt
ファイル名の感嘆符 (!)
ファイル名を単一引用符で囲み、他のことはすべて同じです。
$ touch '!ravi.txt'
ファイル名の中のアットマーク (@)
特別なことはなく、@記号を含むファイル名を普通のファイルとして扱います。
$ touch '@ravi.txt'
ファイル名のキャレット記号(^)
特別な注意は必要ありません。ファイル名に^が含まれているファイルを通常のファイルとして使用してください。
$ touch '^ravi.txt'
ファイル名のアンパサンド記号 (&)
ファイル名はシングルクォートで囲む必要があり、これで準備完了です。
$ touch '&ravi.txt'
ファイル名の括弧()
ファイル名にカッコが含まれている場合は、ファイル名を単一の引用符で囲む必要があります。
$ touch '(ravi.txt)'
ファイル名の中括弧 ({})
特別な配慮は必要ありません。ただのファイルとして扱ってください。
$ touch {ravi.txt}
ファイル名の中の山形記号(<>)
山形記号を含むファイル名は単一引用符で囲む必要があります。
$ touch '<ravi.txt>'
ファイル名の角括弧 ([])
角括弧を含むファイル名は通常のファイルとして扱い、特別な注意を払う必要はありません。
$ touch [ravi.txt]
ファイル名のアンダースコア (_)
それらは非常に一般的で、特別なことは何も必要ありません。普通のファイルでやることをそのままやってください。
$ touch _ravi.txt
ファイル名の等号 (=)
イコールサインがあっても何も変わりません、それを通常のファイルとして使用できます。
$ touch =ravi.txt
ファイル名のバックスラッシュ (\)
バックスラッシュはシェルに次の文字を無視させるために使用します。ファイル名は、セミコロンの場合と同様に、シングルクォートで囲む必要があります。それ以外のことは簡単です。
$ touch '\ravi.txt'
ファイル名の中のフォワード (\)
ファイルシステムにバグがある限り、名前にスラッシュ (/) を含むファイルを作成することはできません。スラッシュをエスケープする方法はありません。
したがって、‘/ravi.txt’や‘b/c.txt’のようなファイルを作成できる場合、あなたのファイルシステムにバグがあるか、またはUnicodeサポートがあり、スラッシュを含むファイルを作成できることになります。この場合、スラッシュは実際のスラッシュではなく、スラッシュのように見えるUnicode文字です。
ファイル名の疑問符 (?)
再度、特別な努力を必要としない例です。ファイル名にクエスチョンマークが含まれている場合、最も一般的な方法で扱うことができます。
$ touch '?ravi.txt'
ファイル名の中のドットマーク (.)
ドット (.) で始まるファイルは、Linuxでは非常に特別なもので、ドットファイルと呼ばれています。これらは通常、設定ファイルやシステムファイルの隠しファイルです。そのようなファイルを表示するには、ls コマンドと一緒にスイッチ -a または -A を使用する必要があります。
そのようなファイルの作成、編集、名前の変更、削除は簡単です。
$ touch '.ravi.txt'
注意: Linuxでは、ファイル名に必要なだけのドット (.) を持つことができます。他のシステムのドットとは異なり、名前と拡張子を区切るためのものではありません。複数のドットを持つファイルを作成することができます。
$ touch 1.2.3.4.5.6.7.8.9.10.txt
そしてそれを確認してください:
$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun 8 14:32 1.2.3.4.5.6.7.8.9.10.txt
ファイル名のカンマ (,)
ファイル名にカンマを含めることができ、何個でも構いません。また、特別なものは必要ありません。普通の方法で、シンプルなファイル名のようにそれを行ってください。
$ touch ',ravi.txt'
or
touch ',ravi,.txt'
ファイル名のコロン(:)
ファイル名にコロンを含めることができ、必要なだけ使用でき、特別なものは必要ありません。普通の方法で、シンプルなファイル名としてそれを行ってください。
$ touch :12.txt
or
touch ':ravi:.txt'
ファイル名におけるダブルクォーテーション(“ ”)
ファイル名に引用符を含めるには、交換のルールを使用する必要があります。つまり、ファイル名にシングルクォートを含める必要がある場合は、ファイル名をダブルクォートで囲み、ファイル名にダブルクォートを含める必要がある場合は、シングルクォートで囲む必要があります。
$ touch "15'.txt"
and
touch 'ravi”.txt'
ファイル名のチルダ (~)
Linuxの一部のエディタ、例えばemacsは、編集中のファイルのバックアップファイルを作成します。バックアップファイルは、元のファイルの名前にティルダ(~)が付いた名前になります。任意の場所にティルダが含まれる名前のファイルを持つことができます。
$ touch '~ravi.txt'
or
$touch 'anusha~.txt'
ファイル名の空白
スペースを含む名前でファイルを作成します。たとえば「hi my name is ravi.txt」です。
ファイル名にスペースを含めるのは良いアイデアではありません。読みやすい名前が必要な場合は、アンダースコアやダッシュを使うべきです。ただし、そのようなファイルを作成する必要がある場合は、次の文字を無視するバックスラッシュを使用する必要があります。上記のファイルを作成するには、このようにしなければなりません。
$ touch hi\ my\ name\ is\ ravi.txt
hi my name is ravi.txt
私はあなたが遭遇する可能性のあるすべてのシナリオをカバーしようとしました。上記のほとんどの実装は明示的にBASHシェルのためのものであり、他のシェルでは機能しないかもしれません。
もし私が何かを見逃したと感じる場合(それはとても一般的なことで人間の性質です)、以下のコメントにあなたの提案を記入してください。つながりを保ち、コメントし続けてください。引き続き注目してください!私たちをいいね!してシェアして、広める手助けをしてください!


