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 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

El Catala a écrit :

…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
cool


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

El Catala a écrit :

… 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.

=======

Sciensous a écrit :

… 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

MicP a écrit :

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
cool


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 big_smile

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