1 votes

Supprimer récursivement les mêmes fichiers trouvés avec locate

Il semble que cette question ait été posée de plusieurs manières. Mais j'aimerais utiliser rm au lieu de find .

J'ai suivi un certain nombre d'explications sur la manière d'utiliser find mais j'ai un problème avec l'exécution de la fonction find commande. Lorsque j'utilise locate, j'obtiens le résultat suivant :

maxgitt@mgpc:/etc$ locate omero
/etc/nginx/conf.d/omeroweb.conf
/etc/rc0.d/K01omero-web
/etc/rc1.d/K01omero-web
/etc/rc2.d/S03omero-web
/etc/rc3.d/S03omero-web
/etc/rc4.d/S03omero-web
/etc/rc5.d/S03omero-web
/etc/rc6.d/K01omero-web

Mais ensuite, lorsque j'essaie d'utiliser find pour supprimer les fichiers respectifs, j'obtiens l'erreur suivante.

maxgitt@mgpc:/etc$ find -type f -name '*omero*'
./etc/rc0.d/K01omero-web
./etc/rc1.d/K01omero-web
./etc/rc2.d/S03omero-web
./etc/rc3.d/S03omero-web
./etc/rc4.d/S03omero-web
./etc/rc5.d/S03omero-web
./etc/rc6.d/K01omero-web
find: ‘./cups/ssl’: Permission denied
find: ‘./ppp/peers’: Permission denied
find: ‘./polkit-1/localauthority’: Permission denied
find: ‘./ssl/private’: Permission denied
./nginx/conf.d/omeroweb.conf
find: ‘./chatscripts’: Permission denied
find: ‘./docker’: Permission denied

J'ai donc choisi d'utiliser la commande :

maxgitt@mgpc:/etc$ sudo rm -rf /etc/*/*omero-web*

Mais je préférerais être en mesure de supprimer tous les fichiers dans la section etc/ et ses sous-répertoires respectifs. Il ne me reste qu'un seul fichier à cause de mon bricolage. rm commandement :

maxgitt@mgpc:/etc$ locate omero
/etc/nginx/conf.d/omeroweb.conf

4voto

Panther Points 96601

Utiliser sudo

Et faites toujours un essai avant de supprimer les données pour vous assurer que vous ne supprimez pas plus que prévu.

sudo find -type f -name '*omero*'

Ensuite, en supposant que la liste soit bonne

    sudo find -type f -name '*omero*' -delete

ou spécifier un emplacement à rechercher (vous savez déjà que ces fichiers sont dans /etc)

sudo find /etc -iname '*omero*' -delete

-supprimer est plus rapide que -exec rm {} \; o -print0 | xargs -0 rm car il n'a pas besoin de créer un autre processus.

EDIT : Extrait des commentaires

for i in $(locate omero) ; do rm $i ; done

3voto

George Udosen Points 33267

Il suffit d'ajouter le sudo à votre commandement :

sudo find /etc -type f -name '*omero*' -delete

et l'erreur disparaîtra. La raison est que ces fichiers sont la propriété de root user et ne peuvent être retirés que par ceux qui sont dans le sudo et l'utilisateur root.

1voto

Chris Cogdon Points 111

Il y a de nombreuses raisons d'utiliser find plutôt que rm. Surtout si votre version de find supporte l'option "-delete" :

  • Si vos noms de fichiers contiennent des espaces ou des retours à la ligne, votre rm ne fonctionnera pas et pourrait même supprimer les mauvais fichiers.
  • S'il y a beaucoup de fichiers à supprimer, la commande échouera pour avoir dépassé la longueur maximale de la ligne de commande.

Si votre recherche supporte "-delete" :

find -type f -path "*omero*" -delete

Si votre find ne supporte pas "-delete" et nécessite un chemin de départ :

find . -type f -path "*omero*" -print0 | xargs -0 rm

Que -print0 ... -0 est important. Cela indique à find de sortir les noms de fichiers délimités par NUL, et xargs -0 s'attendra à des noms de fichiers délimités par NUL. De cette façon, les espaces et les retours à la ligne dans vos noms de fichiers ne causeront pas de problèmes.

Aussi, j'utilise -path au lieu de -name pour être plus proche de ce que "locate" vous donne. Cependant, cela signifie qu'un fichier sera supprimé s'il se trouve sous un répertoire contenant "omero". Ce n'est probablement pas ce que vous voulez, et vous devriez utiliser -name à la place.

Ceci étant dit, si vous êtes sûr de ce que vous avez obtenu à la fin, mettez sudo au début de la première version. Ou sudo à l'avant des deux find y xargs dans la seconde.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X