Je voulais supprimer des fichiers supérieurs à 2 Mo dans un dossier spécifique. J'ai donc couru:
find . -size +2M
Et j'ai une liste de deux fichiers
./a/b/c/file1
./a/f/g/file2
Je lance donc:
find . -size +2M -exec rm ;
et je reçois le message d'erreur Find: missing argument to -exec
Je vérifie la syntaxe dans la page de manuel et ça dit -exec command ;
Alors au lieu de ça j'essaye
find . -size +2M -exec rm {} +
Et il fonctionne. Je comprends que le {} lui fait exécuter la commande comme rm file1 file2
au lieu de rm file1; rm file2;
.
Alors pourquoi le premier n'a-t-il pas fonctionné?
RÉPONSE:
Je suppose que je devais juste RTFM quelques fois pour enfin comprendre ce qu'il disait. Même si le premier exemple ne montre pas {}, les accolades sont obligatoires dans tous les cas. Et puis ajoutez \; ou + selon la méthode souhaitée. Ne vous contentez pas de lire l'en-tête. Lisez également la description. Je l'ai.
Par souci d'efficacité, il est généralement préférable d'utiliser xargs:
la source
Je n'utiliserais pas du tout -exec pour cela. find peut également supprimer les fichiers eux-mêmes:
(c'est probablement un GNUisme cependant, je ne sais pas si vous le trouveriez dans une recherche non gnu)
la source
Comme documenté, -exec requiert {} comme espace réservé pour la sortie de find.
Le guide définitif pour utiliser les outils bash et GNU est ici
Comme vous pouvez le voir, il montre explicitement la deuxième commande que vous avez utilisée comme exemple.
la source