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 11/08/2009, à 22:10

k1k

commande found * fichier différents de *.mp3 [resolu]

Bonjour,

Je souhaiterai faire le ménage dans mon répertoire mp3,
J'aimerai faire un find dans un dossier et trouver tous les fichiers différents de l'extension mp3
et obtenir la liste des fichiers dans un fichier txt ou les supprimer

Merci de votre aide.

Dernière modification par k1k (Le 12/08/2009, à 09:38)

Hors ligne

#2 Le 11/08/2009, à 23:44

Gage

Re : commande found * fichier différents de *.mp3 [resolu]

Il y a sans doute plus élégant, mais :

mkdir SAUVEGARDE
for i in $(find . -name '*.mp3') ; do mv $i SAUVEGARDE ; done
rm *
mv SAUVEGARDE/* .
rm -r SAUVEGARDE

devrait faire l'affaire. À exécuter dans ton dossier de mp3.

Bien évidemment, tu as une copie de sauvegarde, au cas où ce code ne s'exécuterait pas comme prévu (pour faire court : il crée un dossier SAUVEGARDE, recherche tout ce qui finit par mp3 dans le dossier courant, le déplace dans le dossier SAUVEGARDE, vire ensuite tout ce qui n'est pas un dossier, ressort tout ce qui est dans SAUVEGARDE dans le dossier courant, et supprime le répertoire SAUVEGARDE).

Dernière modification par Gage (Le 11/08/2009, à 23:44)


Ça, ce sont les sources. Le mouton que tu veux est dedans.
Merci, c'est tout à fait comme ça que je le voulais ! Crois-tu qu'il faille beaucoup de ressources à ce mouton ? Parce que ma config est toute petite...
Ça devrait aller. Tu peux te compiler un petit mouton.
Pas si petit que ça. Tiens ! il s'est mis en veille...

Hors ligne

#3 Le 11/08/2009, à 23:50

Elzen

Re : commande found * fichier différents de *.mp3 [resolu]

(Je dirais rmdir plutôt que rm -r, à la fin, elle est censée être faite pour ça (la suppression de répertoires vides))

(Et je vois que je ne suis pas le seul à avoir du mal avec find ^^)

Hors ligne

#4 Le 11/08/2009, à 23:57

Gage

Re : commande found * fichier différents de *.mp3 [resolu]

ArkSeth a écrit :

(Et je vois que je ne suis pas le seul à avoir du mal avec find ^^)

D'autant plus que là, il faut combiner maîtrise de find et maîtrise des expressions régulières... et déjà que la syntaxe de find est imbitable, mais alors les expressions régulières, c'est une véritable horreur.

Je ne sais plus qui a écrit :

Certaines personnes, lorsqu'elles ont un problème, se disent "je sais, je vais utiliser une expression régulière". Maintenant, elles ont deux problèmes.


Ça, ce sont les sources. Le mouton que tu veux est dedans.
Merci, c'est tout à fait comme ça que je le voulais ! Crois-tu qu'il faille beaucoup de ressources à ce mouton ? Parce que ma config est toute petite...
Ça devrait aller. Tu peux te compiler un petit mouton.
Pas si petit que ça. Tiens ! il s'est mis en veille...

Hors ligne

#5 Le 12/08/2009, à 00:02

Elzen

Re : commande found * fichier différents de *.mp3 [resolu]

^^

Nan, mais, je viens de tilter : si tous les fichiers recherchés ont l'extension .mp3, on doit pouvoir les obtenir en faisant « ls *.mp3 », non ?

Partant de là, une commande du genre « ls | grep -Fv "$(ls *.mp3)" » devrait renvoyer la liste des fichiers dont le nom ne finit pas par .mp3
(grep -v "machin" sert à sélectionner uniquement les lignes ne contenant pas machin, et l'option -F indique que machin doit être considéré comme une suite de mots à rechercher et pas comme un seul mot.)

Je viens de faire un essai rapide, ça a l'air de marcher.

Hors ligne

#6 Le 12/08/2009, à 01:07

Gage

Re : commande found * fichier différents de *.mp3 [resolu]

Bon alors par contre, il va y avoir un problème et j'ignore comment le résoudre, c'est de gérer les espaces dans les noms de fichiers.
Exemple : si dans mon répertoire j'ai Sultans of swings.mp3 :

for i in $(find . -name '*.mp3') ; do mv $i SAUVEGARDE ; done
mv: ne peut évaluer `./Sultans': Aucun fichier ou dossier de ce type
mv: ne peut évaluer `of': Aucun fichier ou dossier de ce type
mv: ne peut évaluer `swing.mp3': Aucun fichier ou dossier de ce type

(Bien évidemment, c'est un exemple : Dire straits ne s'écoute qu'en flac)

Une piste serait d'utiliser sed pour remplacer toutes les espaces par des espaces précédées d'un antislash :

mkdir SAUVEGARDE
for i in $(sed -e 's# #\ #g' $(find . -name '*.mp3')) ; do mv $i SAUVEGARDE ; done
rm *
mv SAUVEGARDE/* .
rm -r SAUVEGARDE

Mais ça commence à devenir sacrément embrouillé (et accessoirement, le forum manque de coloration syntaxique)

Dernière modification par Gage (Le 12/08/2009, à 01:07)


Ça, ce sont les sources. Le mouton que tu veux est dedans.
Merci, c'est tout à fait comme ça que je le voulais ! Crois-tu qu'il faille beaucoup de ressources à ce mouton ? Parce que ma config est toute petite...
Ça devrait aller. Tu peux te compiler un petit mouton.
Pas si petit que ça. Tiens ! il s'est mis en veille...

Hors ligne

#7 Le 12/08/2009, à 06:29

vincentp010

Re : commande found * fichier différents de *.mp3 [resolu]

Salut,

après avoir parcouru le man de long en large:

find . -depth -not -iname "*.mp3" -delete

L'option -not pour inverser le résultat.

PS: ne pas oublier de se mettre dans le bon répertoire.
PS2: exécuter sans -delete avant pour vérifier les résultats.

Dernière modification par vincentp010 (Le 12/08/2009, à 06:31)


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#8 Le 12/08/2009, à 09:35

k1k

Re : commande found * fichier différents de *.mp3 [resolu]

Hello,

Super les gars merci pour les propositions.
j'ai crée un répertoire bidon contenant des fichiers mp3, pdt, txt, avi .. pour tester
j'ai testé :  " ls | grep -Fv "$(ls *.mp3) "
mais il ne revois pas le contenu des dossiers.
et renvois de plus le nom des dossiers.

j'ai testé le " find .-depth -not -iname "*.mp3" -delete
il fonctionne très bien (sous répertoire \ répertoire courant), sauf qu'il renvoi la notification :
find: impossible de supprimer "./album1": Le dossier n'est pas vide
find: impossible de supprimer "./album2": Le dossier n'est pas vide
..
il n'arrive pas supprimer car le dossier contient toujours des mp3 smile

Le script de Gage ne fonctionne pas vraiment bien (il ne fait pas les sous répertoire, et problème d'espace comme il la dit...)


Merci à vous.
c'est ok, je vais soit utilisé le " find .-depth -not -iname "*.mp3" -delete "


Nautilus manque de cette options de find avec option

Hors ligne

#9 Le 12/08/2009, à 09:37

k1k

Re : commande found * fichier différents de *.mp3 [resolu]

>>Nautilus manque de cette options de find avec option
je reviens sur ce que j'ai dit dans nautilus il faut pas mettre le joker * pour les recherche par ctrl + F

mais seul mp3 suffit .

Hors ligne

#10 Le 12/08/2009, à 09:41

®om

Re : commande found * fichier différents de *.mp3 [resolu]

Pour déplacer tous les non-mp3 trouvés dans un sous-répertoire de DIRECTORY vers TARGET :

find DIRECTORY -type f -not -iname '*.mp3' -exec mv {} TARGET \;

Pour supprimer tous les non-mp3 trouvés dans un sous-répertoire de DIRECTORY :

find DIRECTORY -type f -not -iname '*.mp3' -delete

Dernière modification par ®om (Le 13/08/2009, à 09:05)

Hors ligne

#11 Le 12/08/2009, à 10:28

toto2006

Re : commande found * fichier différents de *.mp3 [resolu]

salut ,

tu peux aussi te baser sur les mime types.

cad si un fichier est un mp3/mp2/mpeg  il dois avoir le type MIME "audio/mpeg" .

ex : la commande file -i sur un mp3 doit te retourner "audio/mpeg"

sinon voila un petit script qui va scruter le repertoire dans lequel on l'execute
et lister les fichiers dont le mime type n'est pas "audio/mpeg" dans le fichier ~/NOTANMP3.TXT

DIR=`pwd`

echo "*** DEBUT DE RECHERCHE SUR:" $DIR >>~/NOTANMP3.TXT

find $DIR -name '*.*' | while read I
do
       file -i "$I" | grep -v "audio/mpeg" 
done >>~/NOTANMP3.TXT

echo "*** FIN DE RECHERCHE SUR:" $DIR >>~/NOTANMP3.TXT

cf:     http://www.rfc-editor.org/rfc/rfc3003.txt
        man file

Dernière modification par toto2006 (Le 12/08/2009, à 10:31)

Hors ligne

#12 Le 12/08/2009, à 10:52

k1k

Re : commande found * fichier différents de *.mp3 [resolu]

pas mal ton truc toto2006,
je vais m'en servir,
je vais ventiller manuellement le résultat du fichier et faire 1 fichier deleteFile.txt un autre moveFile.txt
et faire 1 script qui lit le fichier deleteFile.txt qui supprimera tous fichier présent dans cette liste
et un autre script de move qui déplacera tous fichier présent dans un répertoire cible

Hors ligne

#13 Le 12/08/2009, à 18:00

olaf.10

Re : commande found * fichier différents de *.mp3 [resolu]

®om a écrit :

Pour supprimer tous les non-mp3 trouvés dans un sous-répertoire de DIRECTORY :

find DIRECTORY -type f -not -iname '*.mp3' -delete

C'est super ça, merci ®om.

Dernière modification par Olaf Grossebaf (Le 13/08/2009, à 10:58)

Hors ligne

#14 Le 12/08/2009, à 18:48

k1k

Re : commande found * fichier différents de *.mp3 [resolu]

c'est vrai que c'est pas mal du tout ca Rom

Hors ligne

#15 Le 13/08/2009, à 08:27

rpj

Re : commande found * fichier différents de *.mp3 [resolu]

Et pour les images .jpg :

find . -type f -iregex '.*\.jpg?g$' -print

dans le répertoire bien entendu.

Dernière modification par rpj (Le 13/08/2009, à 08:28)


La ligne de commande UNIX devrait être obligatoire dès la maternelle ! :-)
Debian, XFCE,  FF, .
Android dev (éternel débutant)

Hors ligne

#16 Le 13/08/2009, à 09:00

Mpok

Re : commande found * fichier différents de *.mp3 [resolu]

Remarque @om & all : si l'on precise un "-type" dans une commande find, il est RECOMMANDE de le placer en début (sauf cas très particuliers).. (bon, dans ton cas, ça ne doit pas poser de pbm, c'est juste une remarque générale, et une bonne habitude à prendre pour éviter des problèmes).
Les expressions sont évaluées dans l'ordre (de gauche à droite), donc en gros il faut écrire sa commande du moins spécifique au plus spécifique : en l'occurrence, tu veux traiter des fichiers, donc "-type f", et ENSUITE tu veux qu'ils ne soient pas "*.mp3"...
C'est un détail, soit, mais ça peut devenir important pour certains "find" plus complexes..

Hors ligne

#17 Le 13/08/2009, à 09:05

®om

Re : commande found * fichier différents de *.mp3 [resolu]

Mpok a écrit :

Remarque @om & all : si l'on precise un "-type" dans une commande find, il est RECOMMANDE de le placer en début

J'édite smile

Hors ligne