Negation et instruction find

Lancien -  
 Lancien -
Bonjour et bonne année a tous,

J'ai un gros tas de fichiers et la plupart m'encombre plus qu'autre chose, je cherche donc a virer tous les inutiles.
J'ai reussi avec l'instruction find a trouver et a copier ceux qui m'interressent:

find ./ -name '*.swf' -print -ok cp {} ~/Desktop/Site1 \;

Maintenant j'aimerais faire l'operation inverse, detruire ceux qui ne m'interressent pas et laisser les autres tranquilles. C'est la négation de la condition qui me pose probleme, la destruction se faisant par rm -f {} ne devrait pas poser de probleme.
Si quelqu'un pouvait me donner un coup de main
Merci d'avance
Nick
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

juste pour te donner un exemple avec la negation avec find (il faut lire man find:-))

si tu fait des recherche dans le répertoire courant tu peux utiliser seulement le . (qui designe le répertoire courant)
find . -not -name '*.swf' -a -not -name '.'
ou
find . ! -name '*.swf' -a ! -name '.'
1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Déjà tu peux deplacer tes fichiers que tu veux sauvegarder avec

find ./ -name '*.swf' -print -ok mv {} ~/Desktop/Site1 \; 


Une fois les fichiers deplacés, il faut savoir ce que tu veux supprimer. Une négation n'est plus nécessaires puisque les fichiers .swf on été deplacés.

Si tu veux supprimer tout fichier ordinaire alors

find ./ -type f -print -ok rm -f {} ~/Desktop/Site1 \; 
sinon
find ./ -name 'fichier a supprimer' -print -ok rm -f {} ~/Desktop/Site1 \; 
Mais avant tout, précise plutôt ce que tu veux supprimer.
Il ne faut pas jouer avec la commande rm de cette façon avant de savoir ce qu'on fait.
0
Lancien
 
Bonjour,
Tout d'abord merci de votre aide, j'ai une arborescence avec des tas de fichiers en vrac, pages html, .gif etc... Je veux tout enlever sauf les animaations flash et garder l'arborescence. En effet celle ci me donne deja un classement par sujet que je desire conserver.
Par prudence j'ai fait une copie du total avant de jouer avec rm, mais merci du conseil. En fait je voulais supprimmer tous fichier normal ne correspondant pas au filtre *.swf. Puis dans un deuxieme temps mais la je ne me suis pas encore penché sur le probleme, chercher tous les repertoires vides et les detruire, j'aurais a ce moment la une arborescence triée avec mes données directement exploitable.
J'apprecie cette puisssance d'Unix meme si c'est assez dur de s'y mettre,
merci pour tous je vais me pencher sur tous tes conseils
Nick
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

je viens de me rendre compte qu'à cause de copier/coller j'ai écrit des enormes bêtises ici

ça c'est correct

supprime les fichiers qui n'ont pas l'extension .sxw sauf le répertoire courant
find ./ ! -name '*.sxw' -a ! -name './' -type f -exec rm -vf {} \; 
et ça aussi
déplace le fichier .sxw dans Site1
find ./ -name '*.swf' -exec mv -v {} /home/user/Desktop/Site1 \; 


la 1ère commande on peut l'écrire aussi de cette manière
find ./ ! -name '*.sxw' -type f -exec rm -vf {} \; 
vu qu'on utilise -type f

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Puis dans un deuxieme temps mais la je ne me suis pas encore penché sur le probleme, chercher tous les repertoires vides et les detruire
Tu peux essayer un truc du genre :
find . ! -name '.' -type d -exec rmdir -p --ignore-fail-on-non-empty {} 2>/dev/null \;
Explications :
find . cherche depuis le répertoire courant
! -name '.' ne pas tenir compte du répertoire courant
-type d uniquement les répertoires
-exec rmdir exécute la commande "effacer les répertoires vides"
-p effacer les répertoires parents s'ils deviennent vides
--ignore-fail-on-non-empty empêche la commande d'échouer en cas de répertoire non-vide
2>/dev/null envoie les messages d'erreurs à la trappe

;-))
0
Lancien
 
Salut et merci,

1ere partie de l'operation nettoyage passée, résultat nickel avec ceci:
find ./Site1 -type f -not -name '*.swf' -exec rm -f {} \;
Mon probleme venait de ce que je mettais l'operateur not pas a la bonne place.
je tapais -name !'*.swf' il appreciait pas du tout.
Avant de "m'amuser" avec rm j'ai essayé avec -print, y avait du taf, incroyable... Merci Unix ;-)
Merci du coup de main je m'attelle a la suite !

A bientot
0