私のディレクトリに括弧で始まる多くのファイルがあります。競合のため、Dropbox で作成されます。エスケープの組み合わせが役に立たないようです。
rm -rf "(*"
rm -rf "\(*"
rm -rf \(*
Frost Schutzが述べたように、ASCII文字ではないようです。これが本当であるかどうかをどうやって知ることができ、解決策は何ですか?
答え1
シェルは、ここで考慮する必要がある特定の規則を使用してコマンドラインを解釈します。
\を使用してシェルメタ文字をエスケープして、通常の文字のように動作させることができます。
一重引用符または二重引用符を使用すると、これらのシェルメタ文字の大部分(二重引用符を含む)または全体(一重引用符を含む)で特別な意味を失う可能性があります。
引用符は単語の境界にある必要はないので、
rm th"is fil"e
同じですrm "this file"
。ファイル名拡張には[]?*文字を使用できます。この目的のために引用またはエスケープしないでください。
従ってあなたの場合の可能な解決はrm -rf '('*
およびです。あなたの場合、最後がなぜ機能しないのかわかりません。括弧の前にスペースがあるかもしれませんか?rm -rf "("*
rm -rf \(*
次の行を使用すると、ファイル名に興味深い文字があるかどうかを確認できます。
for i in *; do od -c <<< "$i"; done
答え2
*
中に入れると、"
そうでなければ'
拡張されません(ただリテラルです*
)。
*
しかし、外に入れることはできます"
。
rm "("*
rm \(*
ただし、これはあなたがすでに投稿したものと同じです。したがって、これがうまくいかない場合、ファイルは(
最終的にASCII文字で始まらないか(一部のUnicode文字は非常に似ているように見える)、間違った場所で試しています。
答え3
試すことができる2つのタスクは次のとおりです。
1)rm -f \\(*
-r
(再帰的にディレクトリを削除したい場合でなければそれは必要ありません。「ファイル」と言われたのでそのままにします。rm -rf
危険なツールなので必要でなければ使用しないでください。)
2) rm -i*
この方法には少し手動の介入が必要ですが、英数字以外の文字が最初にソートされる傾向があるため、削除したい文字が最初に表示される傾向があり、^C
その文字を取得してから実行できます。
奇妙なワイルドカードを使用したい場合は、firstのecho
代わりにinを使用してみてくださいrm
。 特にこの方法を使用すると、rm -rf
シェルが削除される前に拡張されたと思われるものを確認できます。特に、この種のファイルは、ユーザーが意図したよりも多くのファイルを吹き飛ばし、愚かなことをしたい人によって生成されるためです。
答え4
これらのファイルを一度だけクリーンアップしたい場合は、そのファイルをファイルに一覧表示します。
$ ls -1 > delete-list
delete-list
次に、削除したいファイルの名前だけが含まれるように手動で編集します。ついに:
$ xargs --delim=\\n rm < delete-list
名前がスペースに合う場合は、編集証--delim
オプションを削除できます。