commande rm: supprime les fichiers avec des noms de fichiers contenant des crochets

2

J'essaie de supprimer tous les fichiers d'un répertoire Windows 7 avec des noms de fichiers contenant des crochets; ( et ):

Utilisation de MinGW:

rm *(*)*

Je reçois une erreur:

sh: syntax error near unexpected token '('

Je suppose que c'est parce que le rm La commande voit un crochet comme une sorte d’entrée spéciale. Que pourrais-je faire à la place?

atomh33ls
la source

Réponses:

3

Vous pouvez "échapper" à des métacaractères spécifiques en préfixant une barre oblique inverse.

$ touch 'aaa(bbb)ccc'
$ rm *\(*\)*
$ ls
$
RedGrittyBrick
la source
rm '*(*)*' Donne moi rm: cannot lstat * ( ) ': Aucun fichier ou répertoire de ce nom . rm * (*) * `fonctionne (mais veut aussi supprimer les répertoires avec cette correspondance, mais c'est ce que l'original du PO veut aussi, donnant une ligne d'erreur).
Rik
L'utilisation de citations n'a pas fonctionné pour moi. Le backslash d'évasion a cependant fait. @Rik - Excuses - Je n'étais pas spécifique. Le répertoire que je regarde n'a pas de sous-répertoires.
atomh33ls
1
@RedGrittyBrick La première méthode seulement travaille sur le un fichier nommé *(*)*, mais OP veut travailler tout des dossiers contenant ( et ). Essayez vous-même avec un touch 'a(b)c'. ensuite rm '*(*)*' ne fonctionne pas tout ces fichiers. Pas aussi bash sur Linux! le rm *\(*\)* ne fonctionne à la fois sur Linux et mingw.
Rik
1
@Rik: Merci, j'étais au courant de cela (c'est pourquoi j'ai mentionné "tous les métacaractères") - mais il est peut-être déroutant d'inclure cela dans cette réponse - je vais l'enlever.
RedGrittyBrick
3

Vous pouvez faire ce qui suit:

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

Pour tester je voudrais utiliser le -print argument en premier:

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

Si vous voulez le faire dans tous les sous-répertoires, vous pouvez omettre le -maxdepth 1

Si la -delete ne fonctionne pas, vous pouvez essayer:

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

Modifier: Inclus le -type f faire cela uniquement sur les fichiers (et non sur les répertoires) comme dans rm.

Rik
la source