#1 Le 19/04/2016, à 17:58
- Ric_punk
Rechercher des dossiers et les copier dans un autre répertoire
Salut à tous
Je recherche un petit script qui me permettrait de rechercher certains dossiers et de copier ces dossiers dans un autre dossier.
Cette copie ne concernera que certaines extensions de fichiers contenus dans les dossiers
Je m'explique. Je dois remplir une carte sd de dossiers contenant des mp3. Dans les dossiers d'origine il n'y a pas que des mp3 mais aussi d'autres fichiers (en général des images) mais je ne veux récupérer que les mp3 des dossiers que j'ai choisis
Je sais déjà comment rechercher un dossier et copier ce dossier et son contenu dans un autre répertoire. Là où ça se corse pour moi, c'est de rechercher plusieurs dossiers et de ne prendre que les mp3 de ces dossiers
Je vous montre mon petit bout de script concernant le dossier (juste pour savoir si "j'ai bon" au début
find -type d -name "unfixed - 2012 - punk chaos disorder" -exec cp -Rpt /home/ric/Bureau '{}' +
J'ai déjà la liste complète des dossiers que je dois copier et ils sont tous écrit de la même façon, c'est à dire
groupe - année - titre avec la mention (ep) ou [split] à la fin de quelques dossiers
Je sèche presque totalement
Merci de votre aide ;-)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#2 Le 19/04/2016, à 18:50
- demonipuch
Re : Rechercher des dossiers et les copier dans un autre répertoire
Bonjour
Si tu as déjà la liste des dossiers à copuer pourquoi ne pas utiliser rsync et son option files-from?
Exemple, j'ai 3 dossiers sur mon bureau :
[19:40:20] cedric@HP-CEDRIC:~ $ ls -l /home/cedric/Bureau/
/home/cedric/Bureau/:
total 16
drwxrwxr-x 2 cedric cedric 4096 avril 19 19:37 groupe - année - titre
drwxrwxr-x 2 cedric cedric 4096 avril 19 19:37 groupe - année - titre (ep)
drwxrwxr-x 2 cedric cedric 4096 avril 19 19:38 groupe - année - titre [split]
-rw-rw-r-- 1 cedric cedric 85 avril 19 19:43 liste.txt
Et un fichier avec la liste des dossiers à copier
$ cat /home/cedric/Bureau/liste.txt
groupe - année - titre
groupe - année - titre (ep)
groupe - année - titre [split]
Avec la commande suivante, je copie les dossiers et leur contenu, en excluant les fichiers .jpg, .jpeg et .png, de /home/cedric/Bureau vers /tmp
$ rsync -razvn --exclude="*.jpg" --exclude="*.jpeg" --exclude="*.png" --files-from=/home/cedric/Bureau/liste.txt /home/cedric/Bureau /tmp
sending incremental file list
groupe - année - titre [split]/
groupe - année - titre [split]/morceau1.mp3
groupe - année - titre [split]/morceau2.mp3
groupe - année - titre [split]/morceau3.mp3
groupe - année - titre/
groupe - année - titre/morceau1.mp3
groupe - année - titre/morceau2.mp3
groupe - année - titre/morceau3.mp3
sent 277 bytes received 38 bytes 630.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
A noter que l'option -n de rsync lance la commande en mode "test" (sans faire la copie).
Hors ligne
#3 Le 20/04/2016, à 12:12
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Salut
Merci de ta réponse
Je vais tester ça dès que possible mais j'ai oublié de précisé que les dossiers sont dans des sous dossiers.
Je m'explique, si je veux copier un dossier nommé "groupe - année - titre" ce même dossier est déjà dans un dossier portant le nom du groupe, ce qui donne
groupe\groupe - année - titre
groupe1/groupe1 - année - titre
Si je lance la commande
ls -R --group-directories-first
j'obtiens ça
unfixed - 2012 - punk chaos disorder
unfixed - 2013 - battleside
unfixed - 2012 - punk chaos disorder.zip
unfixed - 2013 - battleside.zip
./unfixed - 2012 - punk chaos disorder:
01. fuck uk.mp3
02. disorder.mp3
03. 1 second 2 live.mp3
04. punk girl.mp3
05. black wolf.mp3
06. revenge.mp3
07. everyday is hell.mp3
08. criminal scum.mp3
09. war-charged.mp3
10. no one is free.mp3
11. uk 12.mp3
12. when the last barricade will fall.mp3
cover.jpg
front.jpg
./unfixed - 2013 - battleside:
01. system collapse.mp3
02. nowhere to run.mp3
03. your punk is too dead for me.mp3
04. face to face.mp3
05. maggie.mp3
06. maybe tomorrow.mp3
07. gates of hell.mp3
08. the way i breathe.mp3
09. for the punx.mp3
10. you are not my god.mp3
cover.jpg
front.jpg
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#4 Le 27/04/2016, à 08:19
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Bon, j'ai déjà trouvé comment faire pour copier uniquement les dossiers de la liste, mais ça copie tout le contenu du dossier, pas uniquement les mp3, mais c'est mieux que rien
while read line; do find /media/ric/Mp3 -type d -name "$line" -exec cp -Rpt "/home/ric/Bureau/copie mp3" '{}' +; done < list_mp3
et si je veux copier les fichiers mais ne pas écraser ceux déjà présents, j'ajoute -n à la commande cp
while read line; do find /media/ric/Mp3 -type d -name "$line" -exec cp -nRpt "/home/ric/Bureau/copie mp3" '{}' +; done < list_mp3
Je n'ai pas encore trouvé pour ne copier que les mp3, mais je cherche, si quelqu'un a une idée je suis preneur
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#5 Le 27/04/2016, à 08:50
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
Salut,
Le mieux c'est rsync il me semble ; tu peux essayer cette commande :
rsync -a --include=*.mp3 --include=*/ --exclude=* "/chemin/source/" "/chemin/cible/"
Ça copie le contenu de /chemin/source dans /chemin/cible en ne prenant que les mp3 et les sous-répertoires, et ça exclu tout le reste.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 27/04/2016, à 09:39
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Salut
Ah ben si c'était si simple
Le problème c'est que dans le dossier source j'ai pas mal de dossiers qui ne doivent pas être copiés et qu'avec ta commande ça me copie absolument tout.
J'ai aussi essayé avec le paramètre --files-from= mais il prend la liste comme une liste de fichiers et pas de dossiers et comme je le disais dans mon post précédant les dossiers que je veux copier sont systématiquement contenus dans un dossier portant le nom du groupe du style
groupe/groupe - année - titre de l'album
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#7 Le 27/04/2016, à 10:06
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
Tu peux rajouter des choses du type « --exclude=dossier1/ » pour exclure tous les répertoires « dossier1 » quelque soit leur emplacement, ou des « --exclude=toto*/ » pour exclure tous les répertoires « toto* » quelque soit leur emplacement ; l'ordre des « --include/--exclude » est important, le résultat peut être totalement différent si on les inverse ; pour des exclusions de dossiers, je dirais qu'il faut mettre comme ça :
rsync -a --exclude=toto*/ --exclude=dossier1/ --include=*/ --include=*.mp3 --exclude=* "/chemin/source/" "/chemin/cible/"
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 27/04/2016, à 10:24
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Impossible
J'ai déjà 374 dossiers de groupes (et la liste s'allonge régulièrement) et une multitude de dossiers dans ces dossiers, exclure les dossiers un par un ne sert à rien dans mon cas, autant que je les copies "à la main" directement.
Mais je crois que j'ai trouvé la solution
tout d'abord il faut que je crée la liste des dossiers à copier à partir de la liste de départ, et comme ces dossiers sont dans des sous-dossiers avec un find ça marche
while read line; do find /media/ric/Mp3 -type d -name "$line" -exec echo -e >> "/home/ric/Bureau/list_test" '{}' +; done < list_mp3
Cette ligne me permet de créer le fichier avec les chemins complets vers les dossiers
Si ma liste contient par exemple
avskum - 2003 - punkista
cop on fire - 2004 - cop on fire
heyoka - 1996 - demain sera
ça me donne ce résultat
/media/ric/Mp3/heyoka/heyoka - 1996 - demain sera
/media/ric/Mp3/avskum/avskum - 2003 - punkista
/media/ric/Mp3/cop on fire/cop on fire - 2004 - cop on fire
/media/ric/Mp3/heyoka/heyoka - 1996 - demain sera
ensuite je lance cette commande qui va lire le résultat du premier script
while read line; do rsync -av --include=*/ --include=*.mp3 --exclude=* "/$line" "/home/ric/Bureau/copie mp3/"; done < list_test
et si je fais ensuite un tree dans le dossier de destination j'obtiens ça
.
├── avskum - 2003 - punkista
│ ├── 01. fight back capitalism.mp3
│ ├── 02. blod rod.mp3
│ ├── 03. state terrorism.mp3
│ ├── 04. ingen människa är illegal.mp3
│ ├── 05. girigbukar.mp3
│ ├── 06. slå tillbaka.mp3
│ ├── 07. losers union.mp3
│ ├── 08. i hate your fucking war song.mp3
│ ├── 09. svinens sång.mp3
│ ├── 10. the master and slave system.mp3
│ ├── 11. the punk empowerment.mp3
│ ├── 12. united states of war.mp3
│ ├── 13. welcome to the fatland.mp3
│ ├── 14. fight back racism.mp3
│ └── 15. the children of war.mp3
├── cop on fire - 2004 - cop on fire
│ ├── 01. imbecile.mp3
│ ├── 02. asco.mp3
│ ├── 03. medalla de oro.mp3
│ ├── 04. vive la merde.mp3
│ ├── 05. noir.mp3
│ ├── 06. bill gates vete a la mierda.mp3
│ ├── 07. bar de carretera.mp3
│ ├── 08. caos.mp3
│ └── 09. 666 the number of the beast (iron maiden cover).mp3
└── heyoka - 1996 - demain sera
├── 01. intro deviance.mp3
├── 02. tierra y libertad.mp3
├── 03. la bourse ou la vie.mp3
├── 04. la mort à deux.mp3
├── 05. un heil.mp3
├── 06. le bel espoir.mp3
├── 07. contingent déserteur.mp3
├── 08. cris de colère.mp3
├── 09. écran noir.mp3
├── 10. entre nous.mp3
├── 11. portninwak.mp3
├── 12. quartier sauvage.mp3
├── 13. couvre feu.mp3
└── 14. el pueblo unido.mp3
Par contre j'ai toujours un problème avec des dossiers contenant certains caractères comme des [ ( " ' mais ça avance
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#9 Le 27/04/2016, à 12:21
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
À quoi ressemble le fichier list_mp3 ?
Ton arbo d'origine, c'est bien dans le genre /media/ric/Mp3/nom groupe/nom groupe - année - titre album
Les dossiers à exclure peuvent se trouver n'importe où ? Ou sont-ils tous directement sous /media/ric/Mp3 ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 27/04/2016, à 12:55
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
Je pense avoir trouvé une solution qui te convienne :
cd /media/ric/Mp3
for i in */
do
groupe=${i%/}
albums=( "$groupe/$groupe - "*/ )
[[ -d ${albums[0]} ]] || continue
rsync -a --include='*.mp3' --include='/*/' --exclude='*' "${albums[@]%/}" "/home/ric/Bureau/copie mp3/"
done
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 27/04/2016, à 14:34
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Ma liste ressemble à ça
acidez - 2014 - w. malignant tumour - nación de metaleros - forajidos del rock 'n' roll [split]
avskum - 2003 - punkista
cop on fire - 2004 - cop on fire
heyoka - 1996 - demain sera
Mais avec plus de 300 lignes et des dossiers qui, comme dans l'exemple, comporte des crochets, des lettres accentuées ou autre. Chaque dossier se trouve dans un dossier nommé comme le nom du groupe, acidez - 2014 - w. malignant tumour - n.... se trouve dans le dossier acidez et ainsi de suite. Par contre toute la musique se trouve dans le disque /media/ric/Mp3
Je teste ta solution et je te tiens au courant.... mais je ne vois pas la liste à prendre dans ton exemple...
Merci en tout cas.
Dernière modification par Ric_punk (Le 27/04/2016, à 14:37)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#12 Le 27/04/2016, à 15:48
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
Pas besoin de liste !
Tu te places dans le dossier qui contient les répertoires nommés avec seulement le nom du groupe.
Ensuite, par exemple, le script va lancer la synchro que si le dossier « groupe 1 » contient un sous dossier du genre « groupe 1 - 2016 - super titre d'album » ; et seuls les sous-dossiers « groupe 1 - * » seront pris en compte.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#13 Le 27/04/2016, à 19:17
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
J'ai obligatoirement besoin de ma liste puisque dans chaque dossier de groupe il y a souvent plusieurs albums mais je ne les prends pas tous
Pas exemple dans le dossier acidez j'ai tous ces dossiers
acidez - 2006 - en las calles
acidez - 2008 - no hay futuro
acidez - 2010 - w. the angst - deadly dose + dosis mortal [split]
acidez - 2012 - don't ask for permission
acidez - 2014 - beer drinkers survivors
acidez - 2014 - w. malignant tumour - nación de metaleros - forajidos del rock 'n' roll [split]
acidez - 2016 - welcome to the 3d era
mais je ne veux prendre que 4 de ces dossiers, et ça dans pas mal de dossiers.
Je crois que j'ai trouvé la solution mais je rencontre un problème avec les dossiers comprenant des caractères spéciaux comme des '..' ou des [...]
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#14 Le 27/04/2016, à 19:42
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
Ta liste de départ contient exactement les noms d'albums tels qu'ils apparaissent dans l'arborescence ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#15 Le 27/04/2016, à 21:59
- Postmortem
Re : Rechercher des dossiers et les copier dans un autre répertoire
A partir de la liste des albums :
rep_source=/media/ric/Mp3
while read -r album
do
rsync -a --include='*.mp3' --include='/*/' --exclude='*' "$rep_source/"*"/$album" "/home/ric/Bureau/copie mp3/"
done < liste_albums.txt
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#16 Le 29/04/2016, à 09:56
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Whaou !!!!! La grande classe, ça marche impec !!!! Merci beaucoup !!! J'avais eu l'idée avec rsync mais incapable de trouver la bonne formule !!
J'avais trouvé ça
sed -i -e "s/\[/\\\[/g;s/]/\\\]/g" list_mp3
while read -r line; do find /media/ric/Mp3/ -type d -name "$line" -exec echo -e >> /home/ric/Bureau/list_test {} + ; done < list_mp3
while read line; do rsync -av --include=*/ --include=*.mp3 --exclude=* "/$line" "/home/ric/Bureau/copie mp3/"; done < list_test
mais ça faisait un peu trop de code
encore merci de ton aide :);)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#17 Le 03/05/2016, à 11:06
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Je ne ferme pas la discussion, je vais chercher maintenant comment faire une interface graphique pour ce script avec choix des dossiers et de la liste....
Pourquoi faire simple quand on peut faire compliqué
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#18 Le 01/06/2016, à 18:00
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Je recherche avec Zenity pour me faire une petite interface graphique mais je n'ai pas l'impression que Zenity soit capable de faire ce que je cherche, c'est à dire plusieurs choix concernant les dossiers et les fichiers, mais je cherche toujours....
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#19 Le 03/06/2016, à 20:16
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
J'ai fait un petit script graphique pour le choix des répertoires et la liste
Si quelqu'un veut me "corriger"
## sélection du répertoire source ##
rep_src=$(zenity --file-selection --directory --save --title "Sélectionner le répertoire source")
## sélection du répertoire de destination ##
rep_dest=$(zenity --file-selection --directory --save --title "Sélectionner le répertoire de destination")
## sélection de la liste de mp3 ##
list_mp3=$(zenity --file-selection --save --title "Sélectionner la liste de mp3 à copier")
## récapitulatif
recap=$(echo "Répertoire source : $rep_src\n
Répertoire de destination : $rep_dest\n
Liste mp3 : $list_mp3" | zenity --text-info --editable --width 350 --height 200)
## Validation et copie des fichiers dans la carte SD
if [ "$?" -eq 0 ];
then
while read -r album; do rsync -av --include='/*/' --include="*.mp3" --exclude='*' "$rep_src/"*"/$album" "$rep_dest";done < $list_mp3
exit
fi
Dernière modification par Ric_punk (Le 03/06/2016, à 20:22)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#20 Le 04/06/2016, à 18:25
- Ric_punk
Re : Rechercher des dossiers et les copier dans un autre répertoire
Je viens de tester yad (http://www.webupd8.org/2010/12/yad-zeni … splay.html) et je crois que j'ai trouvé ce que je cherchais
Mon script
variables=$(yad --title="Copie de Mp3" --text="" \
--form \
--field="Répertoire source":DIR \
--field="Répertoire de destination":DIR \
--field="Sélection de la liste de Mp3":FL)
rep_src=$(echo $variables | awk 'BEGIN {FS="|" } { print $1 }')
rep_dest=$(echo $variables | awk 'BEGIN {FS="|" } { print $2 }')
list_mp3=$(echo $variables | awk 'BEGIN {FS="|" } { print $3 }')
if [ $? -eq 0 ]
then
while read -r album;
do rsync -av --include='/*/' --include="*.mp3" --exclude='*' "$rep_src/"*"/$album" "$rep_dest";
done < $list_mp3
exit
fi
J'ai bon ??
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne