Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/08/2013, à 15:19

snipe2004

Supprimer tous les fichiers sauf...

Bonjour à tous,

Je cherche désespérement un script/une commande qui me permettrait d'effacer :

  • dans un répertoire et ses sous-répertoires

  • tous les fichiers qui ne sont pas des .jpg ou .jpeg

  • mais quand même les fichiers .jpg ou .jpeg commençant par "tn_".

Je me bats avec "find", mais je n'arrive pas à le faire :'(

Merci pour votre aide!

Ps : j'ai pensé qu'il faudrait peut-être au préalable renommer les jpeg en jpg pour se faciliter la vie. Cela me donne une idée... Mais non, Pyrenamer ne peut pas agir de manière récursive dans les sous-répertoires sad

Dernière modification par snipe2004 (Le 28/08/2013, à 15:41)


ACER NITRO V 515-54-75T7
i7-9750H @ 2,6 GHz x 12 + GTX 1660 Ti/PCIe/SSE2 6 Go (GDDR6)
NVMe 1 Tb, IPS 144 Hz

Hors ligne

#2 Le 28/08/2013, à 15:39

pingouinux

Re : Supprimer tous les fichiers sauf...

Bonjour,
Es-tu sûr que ce n'est pas plutôt ceci que tu veux faire ?

Je cherche désespérement un script/une commande qui me permettrait d'effacer :

  • dans un répertoire et ses sous-répertoires

  • tous les fichiers qui ne sont pas des .jpg ou .jpeg

  • ET les fichiers .jpg ou .jpeg commençant par "tn_"

Hors ligne

#3 Le 28/08/2013, à 15:41

snipe2004

Re : Supprimer tous les fichiers sauf...

Ouuuups, bien sûr!

Heureusement que tu étais attentif.

Je corrige mon post initial.


ACER NITRO V 515-54-75T7
i7-9750H @ 2,6 GHz x 12 + GTX 1660 Ti/PCIe/SSE2 6 Go (GDDR6)
NVMe 1 Tb, IPS 144 Hz

Hors ligne

#4 Le 28/08/2013, à 15:57

pingouinux

Re : Supprimer tous les fichiers sauf...

Je ferais comme ceci, en deux étapes :

find répertoire_de_départ -type f \( ! -iname \*.jpg ! -iname \*.jpeg \) -print
find répertoire_de_départ -type f \( -name tn_\*.jpg -o -name tn_\*.jpeg -o -name tn_\*.JPG -o -name tn_\*.JPEG \) -print

Si la liste est correcte, tu remplaces le -print final par -delete dans les deux commandes.

Ajouté : On peut aussi tout faire d'un coup

find répertoire_de_départ -type f \( \( ! -iname \*.jpg ! -iname \*.jpeg \) -o \( -name tn_\*.jpg -o -name tn_\*.jpeg -o -name tn_\*.JPG -o -name tn_\*.JPEG \) \) -print

Dernière modification par pingouinux (Le 28/08/2013, à 16:13)

Hors ligne

#5 Le 28/08/2013, à 18:31

Watael

Re : Supprimer tous les fichiers sauf...

salut,

shopt -s dotglob extglob nullglob
printf '%s\n' ./!(*.jp?(e)g) ./**/!(*.jp?(e)g) ./tn_*.jp?(e)g ./**/tn_*.jp?(e)g

si ça affiche bien les fichiers qui doivent être supprimés, remplace le printf par rm.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 28/08/2013, à 20:08

DJiK

Re : Supprimer tous les fichiers sauf...

Watael a écrit :

shopt -s dotglob extglob nullglob

Mais Watael triche, il utilise des commandes que personne n'a jamais vu! big_smile

Hors ligne

#7 Le 28/08/2013, à 20:13

Watael

Re : Supprimer tous les fichiers sauf...

lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 29/08/2013, à 09:28

snipe2004

Re : Supprimer tous les fichiers sauf...

find répertoire_de_départ -type f \( \( ! -iname \*.jpg ! -iname \*.jpeg \) -o \( -name tn_\*.jpg -o -name tn_\*.jpeg -o -name tn_\*.JPG -o -name tn_\*.JPEG \) \) -print

--> ça a marché du feu de dieu ! Merci big_smile Y avait tellement de fichiers que les "tn" n'étaient pas affichés dans le print, mais en pratique ils ont bien disparus, alleluia!

Un grand merci!

shopt -s dotglob extglob nullglob

Watael, je dois bien t'avouer que j'ai RIEN pigé à ta formule xD Tu peux m'expliquer tongue ?
Merci en tout cas! Elle marchait aussi à mon avis, j'ai juste pas fait le "rm" parce qu'il fallait bien en choisir une des deux...

En tout cas, LINUX POWAAA! Hihi

Dernière modification par snipe2004 (Le 29/08/2013, à 09:29)


ACER NITRO V 515-54-75T7
i7-9750H @ 2,6 GHz x 12 + GTX 1660 Ti/PCIe/SSE2 6 Go (GDDR6)
NVMe 1 Tb, IPS 144 Hz

Hors ligne

#9 Le 29/08/2013, à 10:31

Watael

Re : Supprimer tous les fichiers sauf...

shopt -s globstar nullglob extglob
printf '%s\n' ./**/@(!(*.jp?(e)g)|!(*.jp?(e)g)|tn_*.jp?(e)g|tn_*.jp?(e)g)

je me suis trompé, ce n'est pas dotglob, mais globstar que je voulais utiliser. Bizarrement, ça fonctionnait pas comme je le pensais (normal^^).
globstar permet de descendre dans les sous-répertoires.
nullglob fait en sorte que si aucun fichier ne correspond, alors rien n'est affiché. Sinon, bash afficherait l'expression elle-même.
extglob active la correspondance étendue (c'est un peu long à expliquer, tape man bash, puis /extglob, tu tomberas sur la description des possibilités offertes).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 29/08/2013, à 14:32

snipe2004

Re : Supprimer tous les fichiers sauf...

Et bin on apprend des trucs... Merci!!! Je vais aller voir smile


ACER NITRO V 515-54-75T7
i7-9750H @ 2,6 GHz x 12 + GTX 1660 Ti/PCIe/SSE2 6 Go (GDDR6)
NVMe 1 Tb, IPS 144 Hz

Hors ligne