ファイル名「:?」を削除する方法

ファイル名「:?」を削除する方法

:~誤ってbashシェルでファイル名を作成してしまった

scp foo :~

削除するにはどうすればいいですか?

答え1

試すrm ':?'か、rm ":?"またはrm :\?

主に、ファイル名を一重引用符または二重引用符で囲む必要があります。または、ファイル名に含まれる特殊文字をエスケープする必要があります。

カウントできる特殊文字は次のとおりです。

*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc

またはの場合は、間違った名前のファイルが削除されないように、のmy_file代わりに一重引用符を使用することをお勧めします。一重引用符文字は、Bourne のようなシェルで一重引用符で引用できない唯一の文字ですが、ファイル名の残りの部分を と 自体で次のように引用できます。$filerm $filerm "$file"file='my_file''...''\'

rm -- '-$#~<>'\''"*?[]{}'`

-シェルに特別なものではありませんが、 では特別なものでありrm、 が引数の先頭にある場合はオプションとして扱われます。ここで は、後続の引数が で始まっていてもオプションとして扱われないことを--示しています。rm-

答え2

--一般的に、奇妙な名前のファイルを削除するときは、オプションの終了を示すマーカーを使用することをお勧めします。このフラグの後の部分は、位置パラメータとして処理されます。(参照:「--」(ダブルダッシュ)はどういう意味ですか?

つまり、

rm -i -- :?

(@Doug O'Neal の提案どおり、この-iオプションでは削除前にプロンプ​​トが表示され、正しいファイルを削除しているかどうかが検証されます。)

ただし、この場合、?シェルによって glob 文字として展開されます。したがって、上記は機能しません。

この場合、シェルのオートコンプリート機能を使用できます。奇妙な名前のファイルがあるディレクトリに移動し、 と入力しrm :( を押さずにEnter)、 を押してTab現在のディレクトリ内のすべてのファイルを順に選択します。奇妙な名前のファイルは、適切に引用符で囲まれて表示されます。

関連情報