Il semble que cette question ait été posée de plusieurs façons. Mais je voudrais utiliser rm
au lieu de find
.
J'ai suivi un certain nombre d'explications sur la façon d'utiliser find
, mais j'ai un problème avec l'exécution de la commande find
. Lorsque j'utilise Locate, j'obtiens la sortie suivante:
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 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 opté à la place pour utiliser la commande:
maxgitt@mgpc:/etc$ Sudo rm -rf /etc/*/*omero-web*
Mais je préférerais pouvoir supprimer tous les fichiers dans le etc/
répertoire et ses sous-répertoires respectifs. Je me retrouve avec un fichier à cause de ma commande hacky rm
:
maxgitt@mgpc:/etc$ locate omero
/etc/nginx/conf.d/omeroweb.conf
Utilisez Sudo
Et faites toujours un essai avant de supprimer pour vous assurer de ne pas retirer plus que prévu.
Sudo find -type f -name '*omero*'
Ensuite, en supposant que la liste semble bonne
Sudo find -type f -name '*omero*' -delete
ou spécifiez un emplacement à rechercher (vous savez déjà que ces fichiers se trouvent dans/etc)
Sudo find /etc -iname '*omero*' -delete
-delete est plus rapide que -exec rm {} \;
ou -print0 | xargs -0 rm
car il n'a pas à générer un autre processus.
EDIT: D'après les commentaires
for i in $(locate omero) ; do rm $i ; done
Il vous suffit d'ajouter le Sudo
à votre commande:
Sudo find /etc -type f -name '*omero*' -delete
et l'erreur disparaîtra. La raison étant que ces fichiers appartiennent à root user
et ne peut être supprimé que par ceux du groupe Sudo
et l'utilisateur root.
Il existe de nombreuses raisons d'utiliser find plutôt que rm. Surtout si votre version de find prend en charge l'option "-delete":
rm
ne fonctionnera pas et peut même supprimer les mauvais fichiers.Si votre recherche prend en charge "-delete":
find -type f -path "*omero*" -delete
Si votre recherche ne prend pas en charge "-delete" et nécessite un chemin de départ:
find . -type f -path "*omero*" -print0 | xargs -0 rm
Cette '-print0
... -0
' est important. Cela indique à find de sortir les noms de fichiers délimités par NUL, et xargs -0 attendra les noms de fichiers délimités NUL. De cette façon, les espaces et les nouvelles lignes dans vos noms de fichiers ne causeront pas de problèmes.
De plus, j'utilise -path
au lieu de -name
pour mieux correspondre à ce que vous permet de localiser. 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
au lieu.
Avec cela à l'écart, 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 de find
et xargs
dans la seconde.