#1 Le 29/04/2006, à 21:40
- luron
[Résolu] Recherche et copie de fichiers selon l'extension
Bonjour!
J'aimerais savoir comment faire une recherche en précisant l'extension des fichiers et copier tous les fichiers trouvés vers un dossier en particulier. Par exemple, rechercher tous les fichiers *.odt présents sur mon ordinateur et les copier sur ma clé usb.
Je peux facilement trouver tous les fichiers *.odt sur mon ordinateur à l'aide du logiciel gnome-search-tool, mais le problème est que les actions possibles après la recherche sont très restreintes (après un clic droit, on ne peut qu'ouvrir le fichier ou le dossier ou déplacer à la corbeille). Je n'ai pas trouvé non plus de façon de le faire à l'aide de cp dans une console.
Quelqu'un a une idée? Merci beaucoup!
Dernière modification par luron (Le 01/05/2006, à 14:49)
Hors ligne
#2 Le 29/04/2006, à 21:44
- etoquio
Re : [Résolu] Recherche et copie de fichiers selon l'extension
avec gnome search tool, tu fait ta recherche, "ctrl a" et tu fait un drag and drop sur ta cle usb et c fini
bonne soiree
Dernière modification par etoquio (Le 29/04/2006, à 21:47)
France Telecom dit ADIEU à ses abonnés(10000 lignes / jour) !!!,
Un jour Bilou perdra aussi beaucoup de clients !!!!
"A vendre, grosse PME, 1 $ symbolique (0.10 €)" ~ THE FUTUR ???????"
Hors ligne
#3 Le 29/04/2006, à 21:48
- etoquio
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Tu peut essayé un logiciel que je trouve sympa pour la gestion de fichier c'est GNOME COMMANDER, il est complet !!!
France Telecom dit ADIEU à ses abonnés(10000 lignes / jour) !!!,
Un jour Bilou perdra aussi beaucoup de clients !!!!
"A vendre, grosse PME, 1 $ symbolique (0.10 €)" ~ THE FUTUR ???????"
Hors ligne
#4 Le 29/04/2006, à 22:15
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Merci beaucoup etoquio pour ta réponse plus que rapide! C'était tout simple...
Je vais installer le logiciel que tu me suggères et le tester.
Bonne soirée à toi aussi!
Hors ligne
#5 Le 29/04/2006, à 22:23
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Ou très simplement :
#! /bin/bash
#script findcp.sh
TYPE=odt #type de fichier à copier
ORIGINE=~/origine #répertoire à copier
DEST=~/destination # cible où coller les copies
for file in $ORIGINE/*.$TYPE
do
cp -a $file $DEST
done
#6 Le 29/04/2006, à 23:05
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Finalement, mon problème n'est pas résolu. J'avais fait une recherche à l'aide de gnome-search-tool et j'avais sélectionné et glissé deux ou trois fichiers. Ça copiait bien mes deux ou trois fichiers dans le dossier voulu. Cependant, si je veux copier tous mes fichiers, ça ne marche plus. Par exemple, j'ai environ 100 fichiers au format .odt et si je les sélectionne tous dans gnome-search-tool et que je les glisse dans un dossier, il n'y en a que la moitié (environ une cinquantaine) qui est copiée. Même chose pour mes *.rtf. Je les sélectionne tous (environ 175) et seulement cinq sont copiés. Je ne comprends pas pourquoi. Je précise que je suis sous Ubuntu 5.10.
À cep_: J'ai copié ton script dans un éditeur de texte, je lui ai donné des permissions 777, je l'ai rendu exécutable grâce à chmod a+x. Ensuite. je dois faire quoi, car si je clique sur le fichier, il s'ouvre avec l'éditeur de texte?
Aussi, peut-on avec ce script faire une recherche de plusieurs types de documents (disons TYPE=odt, sxw)?
Dernière modification par luron (Le 29/04/2006, à 23:06)
Hors ligne
#7 Le 30/04/2006, à 06:35
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
J'ai mis les points que tu peux modifier ici :
TYPE=odt #type de fichier à copier
ORIGINE=~/origine #répertoire à copier
DEST=~/destination # cible où coller les copies
Il suffit donc de modifier :
odt
~/origine
~/destination
et les adapter à tes besoins, les modifiers et les multiplier. Par exemple DEST=/media/usbdisk
Inutle de mettre à 777.
Pour le lancer, si tu nommes le script findcp.sh et le ranges dans le répertoire scripts de ton /home :
bash scripts/findcp.sh
#8 Le 30/04/2006, à 11:32
- kaworu
Re : [Résolu] Recherche et copie de fichiers selon l'extension
+1 pour le script de cep_ , simple et efficace.
(ne pas oublier de le rendre executable)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#9 Le 30/04/2006, à 12:25
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
(ne pas oublier de le rendre executable)
Pas nécessaire s'il est lancé avec la commande : bash le_script
#10 Le 30/04/2006, à 14:06
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
J'ai réussi à faire fonctionner le script, mais j'ai deux petits problèmes.
1) Le script ne parcoure que le dossier de destination. Est-il possible (ce serait presque nécessaire) de lui faire lire récursivement les dossiers (c'est-à-dire dossier d'origine et sous-dossiers)?
2) S'il y a des espaces dans le nom de mes fichiers, le script affiche un message d'erreur. Par exemple, pour un fichier nommé Test 1, le script affiche
/home/utilisateur/Test: Aucun fichier ou répertoire de ce type
/home/utilisateur/1: Aucun fichier ou répertoire de ce type
Merci de votre aide!
Hors ligne
#11 Le 30/04/2006, à 14:34
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Soit tu refais un passage en modifiant la source (le plus simple), soit tu ajoutes un récursif, soit tu modifies sur ces bases par exemple en adaptant encore :
find "$source" -depth | cpio -admvp "$destination" etc. etc.
Pour les noms avec espace il faudrait adapter...
Bonne continuation.
cep
#12 Le 30/04/2006, à 15:02
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Soit tu refais un passage en modifiant la source (le plus simple)
C'est presque impensable avec plus d'une centaine de dossiers à analyser.
soit tu ajoutes un récursif
J'ai essayé
cp -ar $file $DEST
mais ça ne fonctionne pas. Mon test est peut-être niaiseux, mais je dois avouer que je n'y connais pas grand chose en script.
soit tu modifies sur ces bases par exemple en adaptant encore :
find "$source" -depth | cpio -admvp "$destination" etc. etc.
Là je dois avouer que je suis complètement perdu.
Pour les noms avec espace il faudrait adapter...
Je ne sais pas du tout comment faire.
Bonne continuation.
Merci!
Je suis désolé. Je ne veux pas faire faire mon script par les autres, je suis motivé à apprendre même si je n'y connais rien en script. Je n'ai pas peur non plus de la ligne de commande, j'ai appris beaucoup depuis le jour où j'ai balancé vous savez quoi (précisément le jour où j'ai eu accès à un disque de Linux!) pour n'être que sous Linux. Par exemple, j'utilise storeBackup en ligne de commande pour des sauvegardes. Je n'ai pas trouvé d'options malheureusement pour ne sauvegarder que telles ou telles extensions (seulement les *.odt, *.sxw, *.txt et *.ogg par exemple). J'aimerais donc pouvoir chercher sur mon ordinateur tous les types de fichiers que je désire sauvegarder et les copier dans un dossier, et ce indépendamment des noms de mes fichiers (avec ou sans espace, avec ou sans accent, etc.).
Je vous remercie beaucoup.
Hors ligne
#13 Le 30/04/2006, à 15:26
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Alors, très rapidement :
#! /bin/bash
# findcp2.sh
TYPE=odt #type de fichier à copier
ORIGINE=~/origine #répertoire à copier
DEST=~/destination # cible où coller les copies
find "$ORIGINE" -depth -regex .*$TYPE | cpio -admvp "$DEST"
#14 Le 30/04/2006, à 15:52
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Merci beaucoup cep_! Ça fonctionne très bien! Je suis bien heureux! Cependant, il ne me reste qu'un petit problème. Si je veux faire une recherche de plusieurs types de documents en même temps (je crois que c'est possible, sinon ce doit être ça le problème), comme
TYPE=odt #type de fichier à copier
TYPE=jpg #type de fichier à copier
le script ne copie que le type de document se trouvant en deuxième (dans mon exemple, que les *.jpg). Est-ce normal? Y a-t-il un moyen de faire la recherche pour *.odt et *.jpg en même temps, par exemple?
Encore un gros merci!
Hors ligne
#15 Le 30/04/2006, à 16:05
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
De rien.
Le plus simple, tu doubles la ligne entière en créant $TYPE2 et son entrée dans la case de configuration.
En ligne de commande ce serait :
find /home/user/repertoire -regex .*odt && find /home/user/repertoire -regex .*jpg
On peut aussi améliorer bien sûr.
#16 Le 30/04/2006, à 16:22
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Le plus simple, tu doubles la ligne entière en créant $TYPE2 et son entrée dans la case de configuration.
Ça fonctionne impeccablement!!! Merci beaucoup cep_, ce script est trop génial!!! Et merci de ton aide et de ta patience!!! J'apprécie beaucoup!
Hors ligne
#17 Le 30/04/2006, à 16:55
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Content de savoir que tu as pu régler ton problème.
Comme quoi les solutions les plus simples sont parfois les meilleures et, avec les outils déjà disponibles dans le système, il n'est pas toujours nécessaire d'ajouter des logiciels.
Cordialement.
cep
#18 Le 30/04/2006, à 18:09
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Merci encore cep_! Je ne veux pas abuser, mais j'ai encore une petite question. Est-il possible d'exclure de la recherche certains sous-dossiers présents dans le dossier d'origine, c'est-à-dire le dossier identifié dans
ORIGINE=~/origine #répertoire à copier
Je te remercie encore.
Hors ligne
#19 Le 30/04/2006, à 18:22
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
C'est un feuilleton
Ça dépent des caractéristiques de fichiers à exclure.
Mais alors tu pourrais envisager dans un premier temps une commande qui établit une liste de fichiers présent, ensuite une autre commande avec un awk ou sed ou autre procédé pour traîter cette liste et enfin une dernière commande qui ferait la copie.
Tout dépend de la base sur laquelle les fichiers doivent être exclus, mais si la liste est complexe il sera plus simple d'intervenir ensuite sur le résultat, c'est à dire sur les fichiers copiés pour faire un rm, ou alors tu fais au départ un mv des fichiers que tu ne veux pas, vers un autre répertoire, hors du répertorie principal, quitte à faire des liens ensuite.
#20 Le 30/04/2006, à 18:49
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
On va y arriver cep_! La première partie de ta réponse est un peu compliquée pour moi.
mais si la liste est complexe il sera plus simple d'intervenir ensuite sur le résultat
Ça me semble plus simple effectivement. Le problème, c'est que je veux faire une sauvegarde de tous mes fichiers comportant du texte (*.odt, *.rtf, *.sxw, *.txt). Le script fonctionne à merveille. Cependant, en l'exécutant et en copiant le résultat sur mon ordinateur, je me retrouve avec environ 8000 fichiers *.txt à cause de mon dossier openclipart-0.18-full qui contient près de 8000 oeuvres, chacune accompagnée d'une licence au format *.txt. Je veux faire une copie de sauvegarde sur ma clé usb, mais en usb 1.0 ça va prendre un temps fou à copier 8000 fichiers (je l'ai déjà fait et j'aimerais mieux ne pas le refaire trop souvent).
Je me dis donc qu'une solution simple (outre déménager mon dossier) serait de renommer tous mes fichiers *.txt de mon dossier openclipart-0.18-full pour enlever l'extension. Ainsi, je pourrais utiliser facilement le superbe script sans qu'il ne copie ces 8000 fichiers *.txt. Je me demande donc s'il y a une commande qui permet de renommer tous les fichiers d'un dossier et de ses sous-dossiers? J'utilise déjà le logiciel KRename, mais on ne peut sélectionner avec ce dernier qu'un dossier à la fois (sans ses sous-dossiers).
Merci beaucoup pour ta patience!
Hors ligne
#21 Le 30/04/2006, à 19:14
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Et dans open... il y a d'autres fichiers .txt que ceux à supprimer et pas de sous répertoires ?
DAns ce cas tu peux faire un :
#! /bin/bash
#script findcp3.shTYPE=txt #type de fichier à copier
ORIGINE=~/origine #répertoire à copier
DEST=~/destination # cible où coller les copiesfor file in $ORIGINE/*.$TYPE
do
mv $file $file_bak
done
le mv va renommer les fichiers .txt en .txt_bak
Sinon je regarderai un peu plus en détail plus tard.
#22 Le 30/04/2006, à 19:49
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Il y a justement un paquet de sous-dossiers dans mon dossier openclipart-0.18-full. Je fais des tests avec mon logiciel KRename. J'ai réussi à lui faire voir les sous-dossiers, mais je n'ai pas trouvé encore d'option pour filtrer ma recherche (enlever l'extension seulement pour les *.txt et non pour tous les fichiers).
Hors ligne
#23 Le 30/04/2006, à 20:34
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Ça y est! J'ai réussi! J'ai pu enlever l'extension de tous mes fichiers *.txt dans mon dossier openclipart-0.18-full. Le logiciel KRename offre bien les options sous-dossiers et filtre des fichiers à ouvrir. Elles sont à l'ouverture et je ne les avais jamais vues. Je peux donc désormais utiliser le script en toute quiétude... Merci beaucoup cep_ pour ton aide!
Juste pour savoir et pour voir si je comprends bien, il n'est pas possible avec ton script d'exclure un sous-dossier (recherche dans /home/utilisateur sauf /home/utilisateur/dossier). Il faut nécessairement passer par un renommage ou un déplacement des fichiers non voulus. Me trompé-je?
Dernière modification par luron (Le 30/04/2006, à 20:39)
Hors ligne
#24 Le 30/04/2006, à 21:54
- cep_
Re : [Résolu] Recherche et copie de fichiers selon l'extension
Ok pour kRename.
Tu aurais aussi pu faire un genre de :
find ~/origine -name "*.txt" -exec mv {} {}.bak \;
qui aurait modifié dans le répertoire ~/origine et ses sous répertoires tous les fichiers avec extention .txt en mettant à la place l'extension .bak
Si tu veux l'utiliser en script pour le réutiliser, afin de simplifier modifier utilise les "$TYPE" pour simplifier et adapter facilement.
Donc pour résumer, d'abord la ligne du dessus puis :
#! /bin/bash
# findcp2.sh
TYPE=odt #type de fichier à copier
ORIGINE=~/origine #répertoire à copier
DEST=~/destination # cible où coller les copies
find "$ORIGINE" -depth -regex .*$TYPE | cpio -admvp "$DEST"
Bonne soirée.
cep
#25 Le 01/05/2006, à 00:51
- luron
Re : [Résolu] Recherche et copie de fichiers selon l'extension
find ~/origine -name "*.txt" -exec mv {} {}.bak \;
qui aurait modifié dans le répertoire ~/origine et ses sous répertoires tous les fichiers avec extention .txt en mettant à la place l'extension .bak
Merci beaucoup cep_. J'ai essayé, sauf que ça ne met pas .bak à la place de .txt, mais ça l'ajoute pour donner .txt.bak. Le résultat est sensiblement le même en ce sens que ton script ne reconnaîtra pas les .txt.bak, mais si cette petite commande pouvait vraiment enlever des extensions ou les modifier (document.txt changé en document ou en document.quelque_chose), ça serait génial et beaucoup plus léger qu'ouvrir un logiciel pour faire la même chose.
J'espère que je n'abuse pas... Tu m'as déjà amplement aidé!!!
Hors ligne