Linuxでスペースと特殊文字を含むファイル名を操作する方法


私たちは非常に定期的にファイルやフォルダの名前に出くわします。ほとんどの場合、ファイル/フォルダー名はファイル/フォルダーの内容に関連しており、数字と文字で始まります。英数字のファイル名はかなり一般的で非常に広く使用されていますが、特殊文字を含むファイル/フォルダー名を処理する必要がある場合はそうではありません。

注:任意のタイプのファイルを使用できますが、簡単で簡単に実装できるように、記事全体でテキストファイル(.txt)を扱います。

最も一般的なファイル名の例は次のとおりです。

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
...

ここで最も明白な質問の1つは、ハッシュ(#)、セミコロン(;)、ダッシュ(-)またはその他の特殊文字。

そのようなファイル名は一般的ではありませんが、そのようなファイル名を処理する必要があるときにシェルが壊れたり、あきらめたりしてはならないことに同意します。また、技術的に言えば、フォルダー、ドライバー、その他すべてのものはLinuxではファイルとして扱われます。

名前にダッシュ(-)が含まれているファイルを処理する

ダッシュ(-)で始まるファイルを作成します(例:-abx.txt)。

$ touch -abc.txt
touch: invalid option -- 'b'
Try 'touch --help' for more information.

上記のエラーの理由は、そのシェルがダッシュ(-)の後のすべてをオプションとして解釈し、明らかにそのようなオプションがないため、エラーです。

このようなエラーを解決するには、オプションとして、特殊文字(ここではダッシュ)の後に何も解釈しないようにBashシェルに指示する必要があります(これと記事の他のほとんどの例はBASH用です)。

このエラーを解決するには、次の2つの方法があります。

$ touch -- -abc.txt		[Option #1]
$ touch ./-abc.txt		[Option #2]

長いリストを作成するには、コマンドlsまたはls -lを実行して、上記の両方の方法で作成されたファイルを確認できます。

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 11:05 -abc.txt

上記のファイルを編集するには、次のようにします。

$ nano -- -abc.txt 
or 
$ nano ./-abc.txt 

注:nanoは、vimのように任意の他のエディターに置き換えることができます。

$ vim -- -abc.txt 
or 
$ vim ./-abc.txt 

同様に、そのようなファイルを移動するには、次のことを行う必要があります。

$ mv -- -abc.txt -a.txt
or
$ mv -- -a.txt -abc.txt

このファイルを削除するには、次のことを行う必要があります。

$ rm -- -abc.txt
or
$ rm ./-abc.txt 

名前にダッシュが含まれているフォルダに多数のファイルがあり、それらすべてを一度に削除する場合は、次のようにします。

$ rm ./-*

1.ファイル名の任意の数のハイフンとその出現について、上記と同じ規則に従います。 Viz。、-a-b-c.txt、ab-c.txt、abc-.txtなど。

2.任意の数のハイフンを持つフォルダーの名前とその出現について、上記と同じ規則に従います。ただし、フォルダーを削除するには、「rm-rf」を次のように使用する必要があります。

$ rm -rf -- -abc
or
$ rm -rf ./-abc

名前にHASH(#)が含まれるファイルの処理

記号は、BASHでは非常に異なる意味を持っています。 の後はコメントとして解釈されるため、BASHでは無視されます。

ファイル#abc.txtを作成します。

$ 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

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:14 #abc.txt

ここで、名前にが含まれているファイルを作成します。

$ touch ./a#bc.txt
$ touch ./abc#.txt

or
$ touch 'a#bc.txt'
$ touch 'abc#.txt'

「ls-l」を実行して確認します。

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 a#bc.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 abc#.txt

2つのファイル(たとえばaと#bc)を一度に作成するとどうなりますか?

$ touch a.txt #bc.txt

作成したファイルを確認します。

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:18 a.txt

上記の例から明らかなように、ファイル「a」のみが作成され、ファイル「#bc」は無視されています。上記の状況を正常に実行するには、次のことができます。

$ touch a.txt ./#bc.txt
or
$ touch a.txt '#bc.txt'

次のように確認します。

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 a.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 #bc.txt

ファイルは次のように移動できます。

$ mv ./#bc.txt ./#cd.txt
or
$ mv '#bc.txt' '#cd.txt'

次のようにコピーします。

$ cp ./#cd.txt ./#de.txt
or
$ cp '#cd.txt' '#de.txt'

次のように、選択したエディターを使用して編集できます。

$ vi ./#cd.txt
or
$ vi '#cd.txt'
$ nano ./#cd.txt
or
$ nano '#cd.txt'

そしてそれを次のように削除します:

$ rm ./#bc.txt 
or
$ rm '#bc.txt'

ファイル名にハッシュ(#)が含まれているすべてのファイルを削除するには、次のコマンドを使用できます。

 # rm ./#*

名前にセミコロン(;)が含まれるファイルの処理

ご存じない場合は、セミコロンは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に通知します。

名前にセミコロンが含まれているファイルおよびフォルダーに対する残りのアクション(つまり、コピー、移動、削除)は、名前を一重引用符で囲むことにより、簡単に実行できます。

ファイル/フォルダ名の他の特殊文字の処理

以下に示すような単純なファイル名のように、余分なものは必要ありません。通常の方法で実行してください。

$ touch +12.txt 

セミコロンの場合と同様に、ファイル名を一重引用符で囲む必要があります。残りのことは簡単です。

$ touch '$12.txt'

別の方法で行う必要はありません。通常のファイルとして扱います。

$ touch %12.txt

ファイル名にアスタリスクを含めても何も変更されず、通常のファイルとして引き続き使用できます。

$ touch *12.txt

注: * で始まるファイルを削除する必要がある場合は、次のコマンドを使用してそのようなファイルを削除しないでください。

$ rm *
or
$ rm -rf *

代わりに、

$ rm ./*.txt

ファイル名を一重引用符で囲むだけで、それ以外は同じです。

$ touch '!12.txt'

余計なことは何もありません。アットマークのあるファイル名を非rmalファイルとして扱います。

$ touch '@12.txt'

特別な注意は必要ありません。ファイル名に ^ が含まれるファイルを通常のファイルとして使用します。

$ touch ^12.txt

ファイル名は一重引用符で囲む必要があり、準備ができています。

$ touch '&12.txt'

ファイル名に括弧が付いている場合は、ファイル名を一重引用符で囲む必要があります。

$ touch '(12.txt)'

特別なケアは必要ありません。ただ別のファイルとして扱ってください。

$ touch {12.txt}

Chevronsを含むファイル名は、一重引用符で囲む必要があります。

$ touch '<12.txt>'

角かっこを含むファイル名は通常のファイルとして扱い、特別な注意を払う必要はありません。

$ touch [12.txt]

それらは非常に一般的であり、特別なものは必要ありません。通常のファイルで行ったであろうことを行うだけです。

$ touch _12.txt

等号を使用しても何も変更されないため、通常のファイルとして使用できます。

$ touch =12.txt

バックスラッシュは、次の文字を無視するようにシェルに指示します。セミコロンの場合と同様に、ファイル名を一重引用符で囲む必要があります。残りのことは簡単です。

$ touch '.txt'

ファイルシステムにバグが発生するまで、名前にスラッシュ(/)が含まれるファイルを作成することはできません。スラッシュをエスケープする方法はありません。

したがって、「/ 12.txt」や「b/c.txt」などのファイルを作成できる場合は、ファイルシステムにバグがあるか、Unicodeをサポートしており、スラッシュを使用してファイルを作成できます。この場合、スラッシュは実際のスラッシュではなく、スラッシュに似たUnicode文字です。

繰り返しますが、特別な試みをする必要がない例です。疑問符の付いたファイル名は、最も一般的な方法で処理できます。

$ touch ?12.txt

ドット(。)で始まるファイルは、Linuxでは非常に特殊であり、ドットファイルと呼ばれます。これらは隠しファイルであり、通常は構成ファイルまたはシステムファイルです。このようなファイルを表示するには、lsコマンドでスイッチ「-a」または「-A」を使用する必要があります。

このようなファイルの作成、編集、名前の変更、および削除は簡単です。

$ touch .12.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 ,12.txt
or
$ touch ,12,.txt

ファイル名にはコロンをいくつでも含めることができ、余分なものは必要ありません。単純なファイル名として、通常の方法で実行してください。

$ touch :12.txt
or
$ touch :12:.txt

ファイル名を引用符で囲むには、交換のルールを使用する必要があります。つまり、ファイル名に一重引用符を含める必要がある場合は、ファイル名を二重引用符で囲み、ファイル名に二重引用符を含める必要がある場合は、一重引用符で囲みます。

$ touch "15'.txt"

and

$ touch '15”.txt'

emacsのようなLinuxの一部のエディターは、編集中のファイルのバックアップファイルを作成します。バックアップファイルには、元のファイルの名前に加えて、ファイル名の末尾にチルダが付いています。名前にチルダが含まれているファイルを、次のように任意の場所に置くことができます。

$ touch ~1a.txt
or
$touch 2b~.txt

「こんにちは私の名前はavishek.txtです」と言って、名前が文字/単語の間にスペースがあるファイルを作成します。

ファイル名にスペースを含めることはお勧めできません。読みやすい名前を区別する必要がある場合は、アンダースコアまたはダッシュを使用する必要があります。ただし、そのようなファイルを作成する必要がある場合は、次の文字を無視する円記号を使用する必要があります。上記のファイルを作成するには、この方法で作成する必要があります。

$ touch hi\ my\ name\ is\ avishek.txt

hi my name is avishek.txt

私はあなたが遭遇するかもしれないすべてのシナリオをカバーしようとしました。上記の実装のほとんどは明示的にBASHシェル用であり、他のシェルでは機能しない可能性があります。

私が何か(非常に一般的で人間的な性質)を見逃したと感じた場合は、以下のコメントにあなたの提案を含めることができます。接続を維持し、コメントを続けます。引き続きご期待ください。私たちを好きにして共有し、私たちが広がるのを手伝ってください!