#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
… je souhaite copier des fichiers …
… 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.
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.
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 !!!
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 !
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