web-dev-qa-db-ja.com

bash rmdirで括弧をエスケープする方法は?

10.2 (14C92)のような名前のディレクトリがあります。rmdir-rfを使用して削除します(コンテンツを含めるため)。 \でスペースを渡す方法は知っていますが、結果は次のとおりです。

-bash: syntax error near unexpected token ('

だから、どういうわけか私はコマンドから括弧をエスケープしなければならないようです。これを正しく行うにはどうすればよいですか?

2
procra

_\_を使用してエスケープすることができますany単一文字、スペースですでに行っているように_(_および_)_が含まれています。機能しますが、エスケープする文字やスペースがたくさんある場合は面倒です。

より速い代替策は、エスケープするために単一引用符(_'_)を使用することです文字列全体、つまり次のようなもの:

_rm -rf '10.2 (14C92)'
_

_'_エスケープeverythingであることを覚えておいてください。たとえば、引用符内の変数展開が必要な場合は注意して使用してください。つまり、二重引用符を使用すると、スペースと括弧をエスケープすることもできます。

_rm -rf "10.2 (14C92)"
_

また、あなたの質問に基づいて、rmdirを使用しようとします。 rmdir空のディレクトリでのみ機能し、_-r_および/または_-f_フラグはありません:

名前rmdir-空のディレクトリを削除する

構文rmdir [オプション] ...ディレクトリ...

説明ディレクトリを削除します空の場合

_rm -rf_を使用します。
10.2 (14C92)が本当に空の場合、単純な

_rmdir '10.2 (14C92)'
_

するだろう。

エスケープはbash自体によって行われるため、すべてのコマンドで機能します。つまり、独自の解析ルールに基づいてコマンドに渡すwhatを決定するのはbashであり、コマンドは引数afterbashがそれらを解析しました。

4
Mr Shunz

あなたはすでに正しい道を進んでいます。括弧にはエスケープ文字\も使用できます。

rm -r 10.2\ \(14C92\)

引用を使用することもできます:

rm -r '10.2 (14C92)'
1
Panki

rm -rf 10.2\ \(14C92\)/-このフォルダー10.2\ \(14C92\)/とそのすべてのコンテンツを再帰的に削除します。

0
Tuyen Pham