Copie d'un groupe de fichiers dans plusieurs répertoires

Résolu
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 19 mai 2023 à 18:53
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 30 août 2023 à 06:45

Bonjour,

Je voudrais rédiger un programme Perl (ou en bash) qui crée, dans un premier temps, dans le répertoire /Test les 26 répertoires suivants:

/Rep_a

/Rep_b

/Rep_c

/Rep_z

Le programme copiera, ensuite, dans chacun des 26 répertoires, un groupe de fichiers vides (.txt, utf8) que j’aurai préalablement créé pour la lettre a.

Par exemple, supposons, que j’ai créé les trois fichiers suivants : 

              mots-a-fruits.txt

              mots-a-legumes.txt

              mots-a-animaux.txt

Je voudrais que le programme change la lettre a pour la lettre qui correspond au répertoire. Ainsi, à la fin, je voudrais avoir : 

/Rep_a/       mots-a-fruits.txt

                       mots-a-legumes.txt

                       mots-a-animaux.txt

/Rep_b/       mots-b-fruits.txt

                       mots-b-legumes.txt

                       mots-b-animaux.txt

/Rep_z/       mots-z-fruits.txt

                       mots-z-legumes.txt

                       mots-z-animaux.txt

Merci


Chrome OS / Chrome 80.0.3987.137

A voir également:

2 réponses

Bonsoir.

En bash.

Pour créer tes répertoires :

prefix="Rep_"
for letter in {a..z}; do
    mkdir $prefix$letter
done

Pas bien complexe.


Pour récupérer la lettre située dans le nom du fichier :
 

# Noms que tu devras certainement lister dans un répertoire
files=(
    mots-a-fruits.txt
    mots-f-legumes.txt
    mots-y-animaux.txt
)

for f in ${files[@]}; do
    parts=(${f//-/ })
    echo ${parts[1]}
    # déplacer le fichier avec mv dans le répertoire voulu
done
1
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
30 août 2023 à 06:45

Salut,

Ton premier programme fonctionne correctement. Cependant, ton second ne retourne qu'une lettre. Je voulais plutôt créer, de façon itérative, un groupe de répertoires et un groupe de fichiers spécifiques à chacun des répertoires.

En me basant sur ton premier programme, j'ai trouvé le script qui me donne ce que je veux, soit :

#!/bin/bash

prefixe="Lettre_"

for lettre in {a..e}; do     # Crée les répertoires voulus (Lettre_a, Lettre_b, ...)
mkdir $prefixe$lettre 
done

for lettre in {a..e}; do

# Crée, dans chacun des répertoires, les fichiers associés à la lettre désignée.
# Par exemple pour le répertoire /Lettre_b, les fichiers mots-b-animaux.txt, mots-b-fruits.txt, ...

cd $prefixe$lettre              
touch mots-$lettre-animaux.txt
touch mots-$lettre-fruits.txt
touch mots-$lettre-legumes.txt
cd ..
done

Merci

0
PierrotLeFou
19 mai 2023 à 20:05

Dans perl, on peut manipuler des chaînes de caractères.
On peut également appeler des fonctions du système.
Je te suggère de tout faire dans le répertoire de test au départ.
Je ne connais pas les commandes pour créer un dossier dans ton système.
Sur Linux, je ferais un  mkdir  pour chaque répertoire..
Puis un  cd  pour y aller et un  touch  pour créer chaque fichier vide.

0