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 17/03/2022, à 23:01

Franck-86180

sauvegarde de répertoires et fichiers selon existance

Bonjour,

Je souhaite écrire un script qui sauvegarde tous les répertoires et leur fichier en gardant l’arborescence

le fonction souhaité est la suivante:

Boucle1 Pour tous les répertoires et sous répertoires de /windows/Musique/*
    Si le répertoires /sauvegarde/Musique/* n'existe pas
        Création du répertoire /sauvegarde/Musique/*
        Boucle2 dans tous les fichiers du répertoire /windows/Musique/*
            Si le fichier du répertoire /sauvegarde/Musique/* n'existe pas
                Copier le fichier
            fin si
        fin boucle2
    fin si
fin boucle1

J'ai commencé a écrire ce qui suit mais ,,,,, je rame .... je rame. depuis 2 jours.....
C'est vraiment au dessus de mes capacités

Je continue quand même mais si quelqu'un a une idée pour m'aider

#!/bin/bash

base="/media/windows/Musique"
Lbase=${#base}
save="/media/sauvegarde/Musique"
Lsave=${save}

find /media/windows/Musique | rm -rf /media/sauvegarde/Musique

for inode in $(find $base -type d);
	do
	if [ -d $inode ]; then
		#echo "Origine  : "$inode
		longueur=${#inode}
		destination="$save${inode:${Lbase}:${longueur}}"

		if [ ! -d "$destination" ];then
			#echo "creation :" $destination
			mkdir $destination
		else
			echo "répertoire existant";
		fi
		for file in `ls $inode | grep '.*\(wav\|txt\)'`;
		do
			echo $inode $file
#			if (le fichier n''existe) ; then
#			do
#				copîer le fichier
#			done
		done
	fi
done

Le dernier affichage   echo $inode $file  me découpe les fichiers en petits morceaux

...
/media/windows/Musique/Chanson/Enzo/Enzo 11-Deux
/media/windows/Musique/Chanson/Enzo/Enzo minutes
/media/windows/Musique/Chanson/Enzo/Enzo de
/media/windows/Musique/Chanson/Enzo/Enzo soleil
/media/windows/Musique/Chanson/Enzo/Enzo en
/media/windows/Musique/Chanson/Enzo/Enzo plus
/media/windows/Musique/Chanson/Enzo/Enzo (Rhum
/media/windows/Musique/Chanson/Enzo/Enzo version).wav
/media/windows/Musique/Chanson/Enzo/Enzo 12-Pacifico.wav
/media/windows/Musique/Chanson/Enzo/Enzo Titres.txt

au lieu de

...
/media/windows/Musique/Chanson/Enzo/Enzo 11-Deux minutes de soleil en plus (Rhum version).wav
/media/windows/Musique/Chanson/Enzo/Enzo 12-Pacifico.wav
/media/windows/Musique/Chanson/Enzo/Enzo Titres.txt

Autrement dit, les fichiers sont découpés à chaque caractère espace.

Dommage

Hors ligne

#2 Le 17/03/2022, à 23:12

Qid

Re : sauvegarde de répertoires et fichiers selon existance

La joie des noms avec espace oui...
Par contre juste rassure moi ! Tu ne serais pas entrain d'essayer de réinventer rsync/grsync ? Pourquoi ?


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#3 Le 17/03/2022, à 23:13

eric63

Re : sauvegarde de répertoires et fichiers selon existance

Salut
idées
1 remplacer les espaces par   %20
2a ou insérer "en debut et en fin de titre"
2b a moins que ce ne soit 'en debut et en fin de titre'


Kubuntu 24.10  Wayland Plasma 6.1.5 KDE 6.6.0 Qt 6.6.2 et noyau 6.11.0-9  Asus B760+D4  i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#4 Le 17/03/2022, à 23:45

kamaris

Re : sauvegarde de répertoires et fichiers selon existance

Quand une commande génère un flux, on ne fait pas

for word in $(command); do
  …
done

On fait

while read line; do
  …
done < <(command)

Mais à moins qu'il s'agisse d'un exercice personnel, tu devrais surtout utiliser rsync.

Dernière modification par kamaris (Le 17/03/2022, à 23:45)

Hors ligne

#5 Le 18/03/2022, à 10:52

Franck-86180

Re : sauvegarde de répertoires et fichiers selon existance

Je ne connaissais pas rsync ni grsync.

MERCI

ceci étant, mon but était de sauvegarder (synchroniser) un répertoire contenu dans un disque
avec un répertoire contenu sur un autre disque.
Mais si le fichier d'origine a été abimé (zippé avec mot de passe par un pirate comme ça m'est arrivé) je ne veux pas de écraser mes fichiers sauvegardé par le fichier vérolé.

Après avoir lu https://doc.ubuntu-fr.org/tutoriel/sauv … avec_rsync

il me semble que ça répond à toutes ma problématique.
Je tente ça de suite en y incluant l'astuce du cron.weekly

En fait, j'utilise déjà SyncBackFree pour sauvegarder mon PC Windows sur mon PC Ubuntu
Donc, il me reste juste l'étape sauvegarde entre disques sur le PC Ubuntu

Une petite question encore,
A votre avis, est-ce que je peux dans le même script faire:

#!/bin/bash
mount -t ext4 /dev/sdc1 /media/sauvegarde
rsync /media/Windows/ media/sauvegarde/
umount /media/sauvegarde

C'est surement de la paranoïa mais je me suis fait piraté mon NAS une fois, pas 2 (enfin pas encore :-( )

merci encore

Dernière modification par Franck-86180 (Le 18/03/2022, à 11:26)

Hors ligne

#6 Le 18/03/2022, à 11:03

Watael

Re : sauvegarde de répertoires et fichiers selon existance

kamaris a écrit :

Quand une commande génère un flux, on ne fait pas

for word in $(command); do
  …
done

On fait

while read line; do
  …
done < <(command)

et pour traiter la sortie de find de manière sûre, on lui ajoute -print0 :

find ... -print0 | while IFS='' read -d '' -r varName; do ... "$varName"... done

j'avais vu qu'il est possible de copier toute un arborescence en utilisant tar
un coup de stfw(copy directory tree) :

tar cf - * | ( cd /target; tar xfp -)

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

Hors ligne

#7 Le 18/03/2022, à 12:13

Qid

Re : sauvegarde de répertoires et fichiers selon existance

Franck-86180 a écrit :

Une petite question encore,
A votre avis, est-ce que je peux dans le même script faire:

#!/bin/bash
mount -t ext4 /dev/sdc1 /media/sauvegarde
rsync /media/Windows/ media/sauvegarde/
umount /media/sauvegarde

Bah... Au delà de la commande rsync qui me semble trop simple je ne vois pas pourquoi ce script ne serait pas valide...


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne