
:~
誤ってbashシェルでファイル名を作成してしまった
scp foo :~
削除するにはどうすればいいですか?
答え1
試すrm ':?'
か、rm ":?"
またはrm :\?
主に、ファイル名を一重引用符または二重引用符で囲む必要があります。または、ファイル名に含まれる特殊文字をエスケープする必要があります。
カウントできる特殊文字は次のとおりです。
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
またはの場合は、間違った名前のファイルが削除されないように、のmy_file
代わりに一重引用符を使用することをお勧めします。一重引用符文字は、Bourne のようなシェルで一重引用符で引用できない唯一の文字ですが、ファイル名の残りの部分を と 自体で次のように引用できます。$file
rm $file
rm "$file"
file='my_file'
'...'
'
\'
rm -- '-$#~<>'\''"*?[]{}'`
は-
シェルに特別なものではありませんが、 では特別なものでありrm
、 が引数の先頭にある場合はオプションとして扱われます。ここで は、後続の引数が で始まっていてもオプションとして扱われないことを--
示しています。rm
-
答え2
--
一般的に、奇妙な名前のファイルを削除するときは、オプションの終了を示すマーカーを使用することをお勧めします。このフラグの後の部分は、位置パラメータとして処理されます。(参照:「--」(ダブルダッシュ)はどういう意味ですか?)
つまり、
rm -i -- :?
(@Doug O'Neal の提案どおり、この-i
オプションでは削除前にプロンプトが表示され、正しいファイルを削除しているかどうかが検証されます。)
ただし、この場合、?
シェルによって glob 文字として展開されます。したがって、上記は機能しません。
この場合、シェルのオートコンプリート機能を使用できます。奇妙な名前のファイルがあるディレクトリに移動し、 と入力しrm :
( を押さずにEnter)、 を押してTab現在のディレクトリ内のすべてのファイルを順に選択します。奇妙な名前のファイルは、適切に引用符で囲まれて表示されます。