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 16/10/2020, à 14:00

Benjdev

[RÉSOLU] Script copie fichier en fonction d'une partie du nom

Bonjour à tous,

Pas tout à fait débutant en script, mais très très loin d'être un expert, j'aurais besoin de votre aide pour un problème à priori tout simple : je souhaite copier des fichiers dans un répertoire en fonction d'une partie de leur nom.

Pour essayer d'être plus clair : je lance mon script par exemple dans un répertoire contenant toto.coucou_untruc.pdf, mireille.bonjour_untruc.pdf, etc... et chaque fichier est copié respectivement dans les répertoires toto.coucou, mireille.bonjour, etc...

Je trouve pas mal de trucs sur le net, mais pour le moment rien qui corresponde, ou du moins que je comprenne suffisamment bien pour le mettre à ma sauce !

D'avance un grand merci aux bonnes âmes qui pourront m'aiguiller là-dessus et bel aprèm à tous ;-)

Dernière modification par Benjdev (Le 16/10/2020, à 19:48)


Boire du café empêche de dormir. Par contre, dormir empêche de boire du café. "L'excellent du chat", Geluck
Fibré, chez red... Enfin, internet u̶̶n̶̶̶e̶ ̶s̶̶̶e̶̶m̶̶a̶̶i̶̶n̶̶̶e̶ ̶s̶̶u̶̶r̶ ̶d̶̶̶e̶̶u̶̶x̶ qui fonctionne vraiment quoi !
@dewey@mastodon.top

Hors ligne

#2 Le 16/10/2020, à 14:27

Hizoka

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

Salut

Avant :

ls
hizo.patapof_untruc.pdf  mireille.bonjour_untruc.pdf  toto.coucou_untruc.pdf

Le code :

# Boucle traitant tous les éléments du dossier
for Fichier in *
do
  # Ne travail que sur les fichiers
  if [[ -f "${Fichier}" ]]
  then
    # Garde tout ce qui se trouve avant le 1er _
    Dossier="${Fichier%%_*}"

    # Crée le dossier s'il n'existe pas
    [[ ! -d "${Dossier}" ]] && mkdir "${Dossier}"

    # Déplace le fichier dans le dossier
    mv "${Fichier}" "${Dossier}"
  fi
done

Attention avec ${Fichier%%_*}, si ton fichier s'appelle hizo.patapof_untruc_oudeux.pdf utilisera le dossier hizo.patapof.
Pour utiliser le dossier hizo.patapof_untruc, il faut remplacer ${Fichier%%_*} par ${Fichier%_*}

Après :

ls -lR                                                                                                                                                                                                                                                                    
.:                                                                                                                                                                                                                                                                            
total 12                                                                                                                                                                                                                                                                      
drwxrwxr-x 2 hizoka hizoka 4096 oct.  16 15:26 hizo.patapof                                                                                                                                                                                                                   
drwxrwxr-x 2 hizoka hizoka 4096 oct.  16 15:26 mireille.bonjour                                                                                                                                                                                                               
drwxrwxr-x 2 hizoka hizoka 4096 oct.  16 15:26 toto.coucou                                                                                                                                                                                                                    

./hizo.patapof:
total 0
-rw-rw-r-- 1 hizoka hizoka 0 oct.  16 15:23 hizo.patapof_untruc.pdf

./mireille.bonjour:
total 0
-rw-rw-r-- 1 hizoka hizoka 0 oct.  16 15:23 mireille.bonjour_untruc.pdf

./toto.coucou:
total 0
-rw-rw-r-- 1 hizoka hizoka 0 oct.  16 15:23 toto.coucou_untruc.pdf

Si tu veux travailler en récursif, soit tu l'actives dans bash, soit tu modifies le code avec :

# Boucle traitant tous les fichiers du dossier actuel et de ses sous dossiers 
while read -r -d '' Fichier
do
    # Garde tout ce qui se trouve avant le 1er _
    Dossier="${Fichier%%_*}"

    # Crée le dossier s'il n'existe pas
    [[ ! -d "${Dossier}" ]] && mkdir "${Dossier}"

    # Déplace le fichier dans le dossier
    mv "${Fichier}" "${Dossier}"
done < <(find "${PWD}" -type f -print0)

Ainsi un sous dossier sera créé à chaque fois.
Si tu relances cette commande après la précédente (ou 2 fois celle-ci) ça te donnera : mireille.bonjour/mireille.bonjour/mireille.bonjour_untruc.pdf

Dernière modification par Hizoka (Le 16/10/2020, à 14:42)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 16/10/2020, à 15:11

erresse

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

Salut Hizoka,
J'avais trouvé ce truc pour gérer automatiquement la création de répertoire ET la copie des fichiers :

# On crée un sous-répertoire si besoin et on y copie les fichiers
rsync --remove-source-files "${Fichier}" "./${Dossier}/"

Cela évite de contrôler l'existence du répertoire avant de le créer et une commande supplémentaire pour déplacer le fichier.
Par ailleurs, "rsync" dispose aussi de fonctionnalités pour gérer la récursivité, mais je ne l'ai pas expérimenté...
Qu'est-ce que tu en penses ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#4 Le 16/10/2020, à 15:45

MicP

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

Bonjour

Benjdev a écrit :

… je souhaite copier des fichiers …

Hizoka a écrit :
…
mv "${Fichier}" "${Dossier}"
…

ATTENTION : la commande mv va supprimer le fichier original
et ne gardera que sa copie après déplacement.

Dernière modification par MicP (Le 16/10/2020, à 15:49)

Hors ligne

#5 Le 16/10/2020, à 16:16

Watael

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

ATTENTION : Watael va attaquer les accolades inutiles.
smile


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

Hors ligne

#6 Le 16/10/2020, à 16:36

MicP

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

…Watael va attaquer les accolades inutiles …

C'est vrai qu'il vaut mieux éviter,
… surtout en période de pandémie. wink

Hors ligne

#7 Le 16/10/2020, à 16:46

erresse

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

C'est vrai qu'il vaut mieux éviter,
… surtout en période de pandémie.

Et jamais après 21h !!!
lol lol lol


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 16/10/2020, à 19:47

Benjdev

Re : [RÉSOLU] Script copie fichier en fonction d'une partie du nom

Wouaouw, ça faisait environ 10 ans que je n'étais pas venu poster par ici, et vous n'avez rien perdu en dynamisme ! yikes
Un grand merci à Hizoka pour la solution, plus complète même que ce que j'envisageais... En tout cas simple et efficace, je ne pourrais pas demander mieux.
Je vais mettre ça en ouvre très vite et ça va sacrément me rendre service !

Merci aussi aux autres contributeurs pour leur participation :
- erresse : je vais me pencher sur rsync pour un autre projet je pense, donc cette optimisation pourrait bien me servir !
- MicP : là ça va, entre cp et mv je maîtrise encore... (mais pas beaucoup plus loin hein !!) Ceci-dit merci quand même de cette précision qui peut éviter quelques jurons lors de manipulation de fichiers un peu "précieux" !

Et merci aussi aux autres pour ce ton et cette vivacité qui fait du bien à lire !
(Malgré mes 2 puces je vais essayer de trouver un peu de temps pour me balader dans les pages histoire de rendre un peu la pareille, à mon humble niveau !)
Bonne soirée à vous !


Boire du café empêche de dormir. Par contre, dormir empêche de boire du café. "L'excellent du chat", Geluck
Fibré, chez red... Enfin, internet u̶̶n̶̶̶e̶ ̶s̶̶̶e̶̶m̶̶a̶̶i̶̶n̶̶̶e̶ ̶s̶̶u̶̶r̶ ̶d̶̶̶e̶̶u̶̶x̶ qui fonctionne vraiment quoi !
@dewey@mastodon.top

Hors ligne