Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 11-02-2019 21:58:41

Antidentity
Membre
Distrib. : See signature
Noyau : Linux amd64
(G)UI : Openbox
Inscription : 03-08-2016

script ou astuce pour déplacer des fichiers en fonction d'une liste

Bonsoir tout le monde,

Je cherche un moyen facile pour déplacer des fichiers images pour qu'ils soient rangés identiquement à un répertoire déjà triés en 3 sous-répertoires. Je m'explique: j'avais un dossier avec des images que j'ai trié en 3 dossiers distincts.
J'ai plusieurs autres dossiers contenant, entre autres, les mêmes images mais avec des résolutions/tailles différentes.

Pour ne pas m'amuser à chaque fois retrier, fichier par fichier, chaque image de chaque dossier, est-il possible d'automatiser cette tâche facilement avec un script? Comme les images ont le même nom de fichier, je pensais qu'il devait être possible de lister les images par dossier et utiliser cette liste pour déplacer les images des autres dossiers à l'aide d'un script. Par contre, je n'ai aucune connaissance en scripts. Une bonne âme aurait-elle ce genre de script sous la main?

Merci à vous,

MSI GE 6QD Apache Pro - Debian Buster 4.19.16-1 (2019-01-17) - Openbox / Windows10
Samsung - Debian Stretch 4.9.144-3.1 (2019-02-19) - Openbox / Windows10

Hors ligne

#2 11-02-2019 23:35:11

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Pas certain que ça marche, mais tu peux essayer un truc dans le genre:

#!/bin/bash

find Mon_repertoire_de_reference > index.txt
find Mon_repertoire_a_trier > liste.txt

while read fichier
do
    cible=$(grep "${fichier##*/}" index.txt)
    cible=${cible%/*}
    if [ -d "$cible" ]
    then
        mkdir -p "temp/$cible"
        cp "$fichier" "temp/$cible"
    fi
done < liste.txt
 

Dernière modification par Beta-Pictoris (12-02-2019 09:15:09)

Hors ligne

#3 12-02-2019 21:47:53

Antidentity
Membre
Distrib. : See signature
Noyau : Linux amd64
(G)UI : Openbox
Inscription : 03-08-2016

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Un tout grand merciiiiiiiiiiiiiiiiiii ! Ça fonctionne! J'ai juste remplacé le cp par mv. J'ai également des fichiers dont l'extension avait été changée, du coup, le script ne prend pas ces fichiers-là. Je ne trouve pas de paramètres à find pour supprimer l'extension dans la liste.

MSI GE 6QD Apache Pro - Debian Buster 4.19.16-1 (2019-01-17) - Openbox / Windows10
Samsung - Debian Stretch 4.9.144-3.1 (2019-02-19) - Openbox / Windows10

Hors ligne

#4 13-02-2019 21:47:47

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Comme ceci ? :

#!/bin/bash

find Mon_repertoire_de_reference > index.txt
find Mon_repertoire_a_trier > liste.txt

while read fichier
do
    name=$(basename "$fichier")
    name=${name%.*}
    cible=$(grep "$name" index.txt)
    cible=${cible%/*}
    if [ -d "$cible" ]
    then
        mkdir -p "temp/$cible"
        cp "$fichier" "temp/$cible"
    fi
done < liste.txt
 

Dernière modification par Beta-Pictoris (13-02-2019 21:48:56)

Hors ligne

#5 19-02-2019 22:22:21

Antidentity
Membre
Distrib. : See signature
Noyau : Linux amd64
(G)UI : Openbox
Inscription : 03-08-2016

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Magnifique, ça fonctionne! Merci à toi! J'ai juste eu un retour dans le terminal de la part de grep:

grep: décompte maximal incorrect


Je crois que mon nombre de fichiers était trop grand. De même j'ai eu une différence dans le nombre de fichiers trouvés/copiés/déplacés en testant un dossier avec les images à la fois en jpg et png par rapport à un dossier contenant uniquement les images sources.


MSI GE 6QD Apache Pro - Debian Buster 4.19.16-1 (2019-01-17) - Openbox / Windows10
Samsung - Debian Stretch 4.9.144-3.1 (2019-02-19) - Openbox / Windows10

Hors ligne

#6 19-02-2019 22:31:21

smolski
admin quasi...modo
Lieu : AIN
Distrib. : 9 (stretch) 64 bits + backports
Noyau : 4.9.65-3+deb9u2
(G)UI : gnome
Inscription : 21-10-2008

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Utiliser rsync -av à la place de cp -r... aussi rapide que mv.
https://debian-facile.org/doc:reseau:rsync

"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#7 19-02-2019 23:09:01

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : script ou astuce pour déplacer des fichiers en fonction d'une liste

Antidentity a écrit :

grep: décompte maximal incorrect


Remplace la ligne :

cible=$(grep "$name" index.txt)


Par :

cible=$(grep -- "$name" index.txt)

Dernière modification par Beta-Pictoris (19-02-2019 23:10:27)

Hors ligne

Pied de page des forums