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

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

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

scp foo :~

どのように削除しますか?

答え1

試してみるrm ':?'rm ":?"rm :\?

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

数える特殊文字は次のとおりです。

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

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

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

これは-シェルに特別なものではありませんが、引数のrm先頭で見つかるとオプションとして扱われるという点で特別です。これは、後で引数がで始まってもオプションと見なされないように--指示します。rm-

答え2

通常、奇妙な名前のファイルを削除したいときはいつでも、--オプションの終わりを示すタグを試してみてください。このフラグの後のすべての項目は位置引数として扱われます。 (また見てください:"--"(二重ダッシュ) とはどういう意味ですか?)

だからそれは

rm -i -- :?

(@Doug O'Nealが提案したように、この-iオプションは削除する前に正しいファイルを削除していることを確認するように求めます。)

ただし、この場合、?シェルはそれをグローバル文字に拡張します。したがって、上記の方法は機能しません。

この場合、シェルのオートコンプリート機能を使用できます。奇妙な名前のファイルがあるディレクトリに移動してrm :(を押しずにEnter)を入力し、キーを押してTab現在のディレクトリのすべてのファイルを循環します。奇妙な名前のファイルは正しく参照されます。

関連情報