重複したダウンロードを削除しようとしましたが、実行エラーが発生しました。
rm -rf *(1)*
これによりすべてが削除され、~/Downloads
エラーメッセージはありません。
この正規表現の役割は正確に何ですか?
答え1
POSIXシェルでは、括弧は(cmd1; cmd2; cmd3)
サブシェルから内部コマンドを生成するために予約されています。これは*(1)*
、角かっこ内のアスタリスクが改行やセミコロンで区切られていないため、構文エラーです。もちろん、*;(1);*
それ自体は文法的なエラーではありませんが、言葉にはなりません。
バッシュではextglob
有効です。を介して確認できますshopt -p |& grep extglob
。」*(pattern-list)
指定されたパターンのゼロ以上の発生と一致します。」。この場合は*(1)*
常に拡張してください。みんな*(1)
パターンがまったく一致しない可能性があり1
、*
他のすべての名前は何でも一致するため、ディレクトリ内のファイルは一致します。その結果、すべてのファイル(およびディレクトリ、ファイル)が削除されます。
また、シェルは正規表現とは異なるシェルパターン(globと呼ばれる)を使用します。バラよりザイルズの答え詳細な指示。あなたの場合、名前に含まれるすべてのファイルを削除するには、(1)
文字通りの意味を維持するために角括弧をエスケープまたは引用する必要があります。
rm -rf *'(1)'*
rm -rf *\(1\)*
rm -rf *"(1)"*