#1 Le 19/04/2020, à 20:59
- El Catala
[Résolu]-Déplacer des fichiers par scripts
Bonsoir,
Pour une personne ne pratiquant l' informatique que par nécessité, je souhaiterai créer un script lui permettant, d' un simple clip, déplacer des fichiers,JPG et MP4 dans un dossier utilisateur.
Dans l' idéal, il faudrait calculer le nombre de fichiers existants dans le dossiers destination est numérotés les nouveaux à la suite.
Pour le déplacement la commande rm me semble convenir mais pour la numérotation, faudrait-il partir sur une boucle.
Pourriez-vous m' en dire plus?
Pour l' instant, ce n' est pas très clair.
Cordialement
Dernière modification par El Catala (Le 21/04/2020, à 20:11)
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#2 Le 19/04/2020, à 21:59
- marcus68
Re : [Résolu]-Déplacer des fichiers par scripts
Bonjour,
pour un script je propose cela (à adapter si il existe des extensions de fichier en majuscules) :
mv --backup=numbered *.{jpg,mp4} /destination
Les fichiers ne seront pas numérotés de façon très esthétique, mais ça marchera.
Pour une boucle avec plus de contrôle, je propose cela (à executer dans le dossier où se trouve les fichiers à copier) :
#!/bin/bash
destination=/aremplacerparledossier
for i in *.{jpg,mp4}
do
j="$i" k=1
while test -f "$destination/$j"
do
j="${i%.*}-$k.${i##*.}"
((k++))
done
mv "$i" "$destination/$j"
done
Hors ligne
#3 Le 19/04/2020, à 22:40
- kamaris
Re : [Résolu]-Déplacer des fichiers par scripts
Tu veux numéroter les fichiers en cas de doublon, ou numéroter systématiquement tout fichier déplacé ?
Hors ligne
#4 Le 19/04/2020, à 22:48
- MicP
Re : [Résolu]-Déplacer des fichiers par scripts
Bonjour
…déplacer des fichiers,JPG et MP4 dans un dossier utilisateur.…
Est-ce que les noms d’extension sont vraiment en lettre majuscule ?
Si c'est le cas, il faudra adapter la ligne de commande et le script qui ont déjà été proposés.
=======
Est-ce que les répertoires cible et source du déplacement et les fichiers à déplacer
sont la propriété du même compte utilisateur qui devra lancer le script de déplacement ?
Sinon, il faudra utiliser les privilèges requis pour accéder à ce ou ces répertoires et fichiers.
=======
Est-ce que les répertoires source et cible sont tous les deux dans des systèmes de fichiers du type ext ?
Sinon, si le répertoire source est dans un système de fichiers de type ext
et que le répertoire cible est dans un système de fichiers de type autre que ext
il faudra s'attendre à perdre certains attributs de ces fichiers.
=======
Si les répertoires source et cible sont dans des systèmes de fichiers différents (=> partitions différentes),
je conseillerais d'éviter d'utiliser la commande mv
pour utiliser dans un premier temps la commande cp
et ensuite ne supprimer les fichiers copiés
qu'après avoir vérifié que toutes les copies sont utilisables.
Dernière modification par MicP (Le 19/04/2020, à 23:41)
Hors ligne
#5 Le 20/04/2020, à 08:48
- Sciensous
Re : [Résolu]-Déplacer des fichiers par scripts
complément @Micp: si la copie se fait sur la même partition, ln me semble préférable à cp
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 20/04/2020, à 09:49
- MicP
Re : [Résolu]-Déplacer des fichiers par scripts
Bonjour
… Pour le déplacement la commande rm me semble convenir …
ATTENTION : j'espère qu'il s'agit d'une erreur de frappe
et que tu voulais plutôt écrire mv ou cp
car la commande rm supprimera tout simplement les fichier.
=======
… ln me semble préférable à cp …
Oui, si le but est seulement de rendre les fichiers accessibles depuis un répertoire supplémentaire
mais s'il s'agit de liens symboliques, il ne faudra surtout pas après supprimer les fichiers source, sinon, tout sera perdu.
EDIT : Ajout de "…s'il s'agit de liens symboliques,…"
Dernière modification par MicP (Le 21/04/2020, à 05:12)
Hors ligne
#7 Le 20/04/2020, à 10:12
- Sciensous
Re : [Résolu]-Déplacer des fichiers par scripts
mais il ne faudra surtout pas après supprimer les fichiers source, sinon, tout sera perdu.
justement non, puisque les noms pointent sur une même source, supprimer "l'original" ne fait que supprimer 1 lien
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#8 Le 20/04/2020, à 10:38
- MicP
Re : [Résolu]-Déplacer des fichiers par scripts
…justement non, puisque les noms pointent sur une même source, …
Effectivement, tu as raison : tu parlais des liens "dur",
alors que par habitude, j'avais fait l'erreur de ne penser qu'aux liens "symboliques".
Dernière modification par MicP (Le 21/04/2020, à 05:07)
Hors ligne
#9 Le 20/04/2020, à 13:20
- El Catala
Re : [Résolu]-Déplacer des fichiers par scripts
Bonjour à tous,
Merci tout d' abord de vous intéressez à ce problème.
Pour ce qui est des extensions, j' ai les deux cas, c' est à dire majuscules et minuscules, tout au moins pour les .jpg. J' ai donc modifié cette partie de code:
*.{jpg,mp4}
en:
*.{jpg,JPG,mp4}
Pour ce qui est des partitions, le dossier d' origine est en Ext et la destination en NTFS.
Enfin, pour la numérotation, il faut que les nouveaux fichiers viennent s' ajouter à la suite de ceux existants dans le dossier destination. En fait, ce sont des photos des résidents d' un EHPAD que mon épouse transfère à leurs familles. Les doublons ne devraient pas exister. D' autre part, le dossier d' origine doit être vidé tous les jours car elle en reçoit quotidiennement.
Une dernière remarque dans le code fort gentiment mis à disposition par Marcus68, nulle part, il n' est fait mention du répertoire d' origine. Est-ce normal?
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#10 Le 20/04/2020, à 13:34
- elcastor
Re : [Résolu]-Déplacer des fichiers par scripts
oui, il exécuter cette commande depuis le chemin d'où elle est exécutée. C'est à dire "ICI" (la commande "pwd" d'indique le répertoire courant)
Hors ligne
#11 Le 20/04/2020, à 13:44
- marcus68
Re : [Résolu]-Déplacer des fichiers par scripts
Tu peux faire "cd /tondossier" avant de l’exécuter, pour te placer dans le bon dossier. Tu peux également ajouter cette commande au début du script (juste après #!/bin/bash) si c'est plus simple pour toi.
Penser aussi à faire des sauvegardes, avant de lancer n'importe quel commande.
Dernière modification par marcus68 (Le 20/04/2020, à 13:44)
Hors ligne
#12 Le 20/04/2020, à 17:27
- kamaris
Re : [Résolu]-Déplacer des fichiers par scripts
Donc je pense que tu veux numéroter systématiquement les fichiers lors de leur déplacement, à la suite de ceux existant déjà dans la cible.
En supposant que le répertoire cible est dédié à cette opération, et ne contient donc que des fichiers précédemment déplacés et numérotés (ou rien), voici ce que ça pourrait donner :
rs=/répertoire-source
rc=/répertoire-cible
n=$(ls -1b "$rc" | wc -l)
shopt -s nocaseglob
for f in "$rs"/*.{jpg,mp4}; do mv -v "$f" "$rc/$((++n))-${f##*/}"; done
Les fichiers seront déplacés du répertoire source vers le répertoire cible, en étant renommés sous la forme « numéro-nom ».
Pour les lister dans l'ordre de numérotation, il suffira ensuite de faire
ls -lv /répertoire-cible
Hors ligne
#13 Le 20/04/2020, à 17:28
- El Catala
Re : [Résolu]-Déplacer des fichiers par scripts
Bonsoir,
Suivant vos conseils, j' ai adapté le script suivant les fichiers du PC. Le transfert s' effectue sans problème. Par contre, il ne renumérote pas les fichiers. En fait deux cas de figure:
un fichier avec le même nom existe, il conserve l' ancien fichier et ajoute -1 au nouveau.
exemple: 004.JPG 004-1.JPG
à l' importation, si la boucle ne trouve pas de fichier identique, il enregistre le nouveau fichier avec son nom.
Est-il possible de renuméroter les fichiers de 1 à ~ ? Cela complique la boucle car il faut connaître le nombre de fichiers et le numéro max utilisé pour renommer les nouveaux fichiers.
Script :
#! /bin/bash
cd /home/elfouste/Téléchargements/
destination=/home/elfouste/Documents/Test
for i in *.{JPG,mp4}
do
j="$i" k=1
while test -f "$destination/$j"
do
j="${i%.*}-$k.${i##*.}"
((k++))
done
mv "$i" "$destination/$j"
done
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#14 Le 20/04/2020, à 18:15
- marcus68
Re : [Résolu]-Déplacer des fichiers par scripts
J'avais pas compris comme ça, j'avais pas saisi que le nom des fichiers sont des numéros. Désolé du coup faut revoir le script.
Du coup la numérotation existante n'est pas important ?
et dans le dossier final, tu veux genre :
001.JPG
002.JPG
003.JPG
004.jpg
005.JPG
001.mp4
002.mp4
si c'est ça on va plancher sur un nouveau script
EDIT : à mon que le précédent script de kamaris te convienne
Dernière modification par marcus68 (Le 20/04/2020, à 18:16)
Hors ligne
#15 Le 20/04/2020, à 18:26
- El Catala
Re : [Résolu]-Déplacer des fichiers par scripts
Bonsoir,
Désolé, c' est moi qui aurait du être plus clairhttp://forum.ubuntu-fr.org/img/smilies/sad.png
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#16 Le 20/04/2020, à 23:50
- kamaris
Re : [Résolu]-Déplacer des fichiers par scripts
Une version du script donné en #12 qui renomme les fichiers en ajoutant des 0 en début de nombre, pour fonctionner en tri alphabétique.
rs=/répertoire-source
rc=/répertoire-cible
n=$(ls -1b "$rc" | wc -l)
m=1${n//?/0}
shopt -s nocaseglob nullglob
for f in "$rs"/*.{jpg,mp4}; do
if ((++n==m)); then
rename 's/([^\/]+)$/0\1/' "$rc"/*
m=1${n//?/0}
fi
mv -v "$f" "$rc/$n-${f##*/}"
done
Hors ligne
#17 Le 21/04/2020, à 12:51
- El Catala
Re : [Résolu]-Déplacer des fichiers par scripts
Bonjour,
Merci Kamaris de votre solution. Je l' ai testé et cela fonctionne. Le résultat obtenu est le suivant:
1-010.JPG
2-025.jpg
3-20200212_163702.jpg
Cette présentation des fichiers est correcte. toutefois serait-il possible lors du renommage de supprimer l' ancien nom.
Je ne vois pas bien dans le if comment il faut si prendre pour arriver à ce résultat.
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#18 Le 21/04/2020, à 16:01
- kamaris
Re : [Résolu]-Déplacer des fichiers par scripts
Ça c'est géré au niveau du mv : il faut que tu remplaces
mv -v "$f" "$rc/$n-${f##*/}"
par
mv -v "$f" "$rc/$n.${f##*.}"
Hors ligne
#19 Le 21/04/2020, à 20:11
- El Catala
Re : [Résolu]-Déplacer des fichiers par scripts
Bonsoir,
Après modification de la ligne, cela fonctionne tel que souhaité. Un grand merci à tous et en particulier à kamaris.
Bonne continuation à tous.
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne