Comando rm: remove arquivos com nomes de arquivos que contêm colchetes

2

Estou tentando remover todos os arquivos em um diretório do Windows 7 com nomes de arquivos que contêm colchetes; (e ):

Usando MinGW:

rm *(*)*

Eu recebo um erro:

sh: syntax error near unexpected token '('

Suponho que isso ocorre porque o rmcomando vê um colchete como algum tipo de entrada especial. O que eu poderia fazer?

atomh33ls
fonte

Respostas:

3

Você pode "escapar" de metacaracteres específicos prefixando a barra invertida.

$ touch 'aaa(bbb)ccc'
$ rm *\(*\)*
$ ls
$
RedGrittyBrick
fonte
rm '*(*)*'dá-me rm: cannot lstat * ( ) ': Nenhum arquivo ou diretório . rm * (*) * `funciona (mas também deseja excluir diretórios com essa correspondência, mas é isso que o original do OP também deseja, fornecendo uma linha de erro).
Rik
Usar aspas não funcionou para mim. A barra invertida de fuga fez embora. @Rik - Desculpas - Eu não era específico. O diretório que estou procurando não possui subdiretórios.
precisa saber é o seguinte
1
@RedGrittyBrick O primeiro método única trabalha no um arquivo chamado *(*)*, mas OP quer trabalhar em todos os arquivos que contêm ( e ). Tente você mesmo com um touch 'a(b)c'. Então rm '*(*)*'não funciona em todos esses arquivos. Também não está no bash no Linux! Ele rm *\(*\)*funciona tanto no Linux quanto no mingw.
Rik
1
@Rik: Obrigado, eu sabia disso (e foi por isso que mencionei "todos os metacaracteres") - mas talvez seja confuso incluir isso nesta resposta - eu o removerei.
RedGrittyBrick # 8/13
3

Você pode fazer o seguinte:

find . -type f -name "*(*)*" -delete -maxdepth 1

Para testar, usaria o -printargumento primeiro:

find . -type f -name "*(*)*" -print -maxdepth 1

Se você quiser fazer isso em todos os subdiretórios, poderá omitir o -maxdepth 1

Se o -deletenão funcionar, você pode tentar:

find . -type f -name "*(*)*" -exec rm -rf {} \;

Editar: Incluído o -type fpara fazer isso somente em arquivos (e não em diretórios) iguais aos de rm.

Rik
fonte