Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 08-01-2014 22:28:06

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

script bash déplacement fichier avec récursion

Bonsoir,
Après la courte présentation, je viens vous solliciter car je n'arrive pas à faire de la récursion avec un script BASH.
Je souhaite déplacer des fichiers qui se trouvent dans des répertoires et des sous-répertoires.
J'arrive à aller au niveau N, N+1 mais pas au N+2 (sous-répertoire de sous-répertoires,  ...).
Je ne comprend pas comment faire avec l'appel du script dans ce dernier, mais je n'arrive pas à comprendre comment faire. neutral

Voici le script commenté, j'espère que je suis clair dans les commentaires hmm

##### Script permettant de déplacer des documents .odt et .pdf dans le répertoire voulu #####
#### Il faut obligatoirement passer deux paramètres (dossier source et dossier destination) lors du lancement du script #####
#!/bin/bash
##### Je vérifie qu'il y ai bien deux paramètres lors du lancement du script
if [ $# -ne 2 ]
then
        echo "il faut obligatoirement mettre deux chemins\nun pour le chemin où se trouve les fichiers et un second pour la destination"
fi
source=$1                       ##### affectation des paramètres à des varaibles
destination=$2

##### Je vérifie que les deux paramètres sont bien des chemins
if [ -d $source ] && [ -d $destination ]
        then
               echo "ok pour les deux"
        else
               echo "un des chemins n'est pas bon"
fi

cd $source        ##### Je me déplace dans le répertoire où se trouve les fichiers et sous-répertoires où se trouvent aussi des fichiers

for i in `ls`        ##### Pour i compris dans la liste de fichiers et de répertoire

do
        if [[ $i = *.odt ]] || [[ $i = *.pdf ]]        ##### Si c'est un fichiers ayant l'extension .odt ou .pdf
                then
                        mv $i $destination/$i            ##### Je le copie dans le dossier de destination
                       # echo "$i est un fichier"
                else

                if [ -d $i ]                                  ##### Sinon si c'est un répertoire
                        then
                                cd $i                         ##### Je me déplace dans le répertoire
                                #echo "on est dans le répertoire $i"
                                for j in `ls`                 ##### Je liste de nouveau le contenu
                                do
                                        if [[ $j = *.odt ]] || [[ $j = *.pdf ]]      ##### Puis je copie de nouveau le fichiers si c'est un fichier .odt ou .pdf
                                               then
                                                        mv $j $destination/$j

                                                        echo "$j"
                                        fi
                                done
                        cd ..            ##### Puis je reviens dans le répertoire précédent pour reprendre la liste des répertoires
                fi
        fi
done
 



Je pense que c'est possible de faire ceci avec un "find" mais je préfère essayer avec un script roll
Si vous avez des suggestions, je suis preneur !

Merci par avance

Amicalement
Ast

Hors ligne

#2 08-01-2014 23:06:37

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : script bash déplacement fichier avec récursion

J'suis pas fort en ce domaine mais là :

cd ..            ##### Puis je reviens dans le répertoire précédent pour reprendre la liste des répertoires


c'est pas cd../ qu'y faut mettre ?


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#3 09-01-2014 00:29:54

MicP
Invité

Re : script bash déplacement fichier avec récursion

@ smolsky "cd .." sans le "/" fonctionne.
Mais plutôt que le script change de répertoire,
il devrait désigner les fichiers source et cible avec leur chemin absolu.

=========
Le shebang devrait être dans la première ligne du script et tout au début de la ligne.

=========
pourquoi ne pas utiliser plusieurs fonctions comme:

une fonction qui affiche le message d'aide:
  description de la fonctionnalité du script
  syntaxe des paramètres et options (obligatoires, optionnels)
  programmes nécessaires au fonctionnement du script
  date, auteur, version
  messages d'erreur/succès retournés par le script

une fonction qui teste les paramètres entrés
une fonction qui teste l'espace nécessaire et disponible
une fonction qui détecte le type (répertoire ou fichier)
une fonction qui déplace les fichiers

==========
la source et la cible peuvent être existantes mais peut-on y lire ou y écrire

==========
sous linux, le type d'un fichier peut (à coup sûr) être déterminé avec la commande "file".
(une extension de nom d'un fichier ne permet pas de déterminer le type de ce fichier)

==========
pourquoi ne pas retourner le ou les paramètres entrés (source ou/et cible) qui sont refusés (genre : "/dudule n'est pas un répertoire existant").
que se passe-t-il s'il n'y a pas assez d'espace dans la cible pour accueillir les fichiers de le source ?

que se passe-t-il si "/rep/fichier_1" et "/rep/sous-rep/fichier_1" sont déplacés dans le même répertoire ?
(ils auront le même nom et ne pourront donc pas cohabiter dans le même répertoire)

La commande "find" serait bien plus adaptée à la recherche récursive tout en appelant la fonction de déplacement.
De plus elle permettrait de parcourir toute la hiérarchie et (même de la recréer sur la cible)

==========
Au final, ça fait peut-être beaucoup de petits sous-problèmes à régler, mais c'est tout-à fait normal.
Un petit bout, ensuite un autre petit bout, etc... et ça finira par très bien fonctionner. smile

Dernière modification par MicP (09-01-2014 00:42:15)

#4 09-01-2014 00:35:18

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

Salut

au lieu de...

echo "il faut obligatoirement mettre deux chemins\nun pour le chemin où se trouve les fichiers et un second pour la destination"



essaye...

echo -e "il faut obligatoirement mettre deux chemins\nun pour le chemin où se trouve les fichiers et un second pour la destination"



Je repasse demain, je n'arrive plus à me concentrer... et maintenant au dodo... big_smile

Amicalement Sly

Dernière modification par Slyfox (09-01-2014 00:36:48)

Hors ligne

#5 09-01-2014 00:57:11

nifseg
Adhérent(e)
Lieu : Dans une forêt
Distrib. : Debian Wheezy + Jessie
Noyau : 3.2.0-4-amd64 + 3.16.0-4-686-pae
(G)UI : Gnome/Mate/Cinnamon
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

Ouais, faut mettre le slash si tu veux aller de dossier parent en dossier parent

cd ../../..

Dernière modification par nifseg (09-01-2014 00:57:37)


L'important n'est pas la chute mais l'atterrissage...
Chapardeur de chocolat DF!!!
Admin un jour, admin toujours...

Hors ligne

#6 09-01-2014 11:18:41

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : script bash déplacement fichier avec récursion

cd ./././././../././././.


tongue


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#7 09-01-2014 12:55:41

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : script bash déplacement fichier avec récursion


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#8 09-01-2014 14:10:39

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

J'ai fait ça en vitesse... j'aurais plus de temps ce soir. smile

Voilà un exemple pour le début de ton script qui permet de choisir le dossier source et de destination.

#! /bin/bash

CHOIXDOSSIER()
{
choixDossierSource=$(zenity --file-selection \
                            --title="Sélectionnez le dossier source" \
                            --directory \
                            --filename="/home/$USER/*")

# Si Annuler
[[ $? -eq 1 ]] && exit

echo "choixDossierSource=$choixDossierSource"

choixDossierDestination=$(zenity --file-selection \
                                 --title="Sélectionnez le dossier de destination" \
                                 --directory \
                                 --filename="/home/$USER/*")

# Si Annuler
[[ $? -eq 1 ]] && exit

echo "choixDossierDestination=$choixDossierDestination"

if [[ -z "$choixDossierDestination" ]] || [[ -z "$choixDossierSource" ]]
   then zenity --error \
               --ok-label="Valider choix" \
               --cancel-label="Quitter" \
               --text="il faut obligatoirement mettre deux chemins\nun pour le chemin où se trouve les fichiers et un second pour la destination"
   # Si Quitter
   [[ $? -eq 1 ]] && exit
   CHOIXDOSSIER
fi
}

CHOIXDOSSIER



J'ai une autre idée... je vais essayé de te faire ça ce soir...

Dernière modification par Slyfox (09-01-2014 22:01:51)

Hors ligne

#9 09-01-2014 19:41:30

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : script bash déplacement fichier avec récursion

Bonjour

Ast a écrit :

J'arrive à aller au niveau N, N+1 mais pas au N+2 (sous-répertoire de sous-répertoires,  ...).
Je ne comprend pas comment faire avec l'appel du script dans ce dernier, mais je n'arrive pas à comprendre comment faire. neutral



Il me semble que le problème d'Ast est plus sur l'algorithme que sur le reste.

Tel que le script est fait à l'heure actuelle, c'est le nombre de boucle

for i in `ls`

qui détermine la profondeur de la récusivité.

Comme le suggère MicP, travailler avec des chemins absolus me semble être une meilleurs solution. Si tu construits une liste de tous les fichiers qui t'intéressent avec chemin absolus, il te suffit ensuite pour chaque item de la liste de créer son arborescence dans ton dossier de destination si elle n'existe pas encore, puis, de copier ton fichier, si tu veux conserver cette arborescence.

Si l'arborescence n'a pas d'importance, c'est encore plus simple à partir ce cette même liste smile

Reste à trouver le meilleur outil pour la construire. Et je ne suis pas certain que le bon candidat soit ls. Jette plutôt un oeuil du coté de locate smile


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

En ligne

#10 09-01-2014 20:11:49

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : script bash déplacement fichier avec récursion

Si j'ai bien compris, tu veux faire un script qui fusionne un dossier dans un autre dossier.

#!/bin/sh
 
if [ $# -ne 2 ];
then
  echo "il faut obligatoirement mettre deux chemins :
- un pour le chemin où se trouve les fichiers ;
- et un second pour la destination."

  exit 1
fi
 
 
fusion ()
{
  source=$1
  destination=$2
 
  for s in $source/*;
  do
    d=$destination/$(basename $s)
    if [ -f "$s" ];
    then # on considère un fichier
      if [ ! -e "$d" ] || [ -f "$d" ];
      then # et le fichier n'existe pas dans la destination ou en tout
        # cas est bien un fichier (ce serait embêtant si on avait un
        # fichier et un dossier qui avaient le même nom
        mv "$s" "$d"
      else
        echo "Problème: $s est un fichier mais $d non."
      fi
    else # on considère un dossier
      if [ ! -e "$d" ];
      then # le dossier n'existe pas dans la destination
        mv "$s" "$d"
      else # il existe
        if [ -d "$d" ];
        then # c'est bien un dossier
          fusion "$s" "$d"
          rmdir "$s"
        else
          echo "Problème: $s est un dossier mais $d non."
        fi
      fi
    fi
  done
}
 
if [ -d "$1" ] && [ -d "$2" ];
then
  fusion "$1" "$2"
else
  echo "Un des chemins n'est pas bon"
fi
 



J'ai pas testé, mais c'est l'idée smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#11 09-01-2014 21:10:26

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

Re : script bash déplacement fichier avec récursion

Bonsoir,

Je suis désolé de vous solliciter et de répondre si tard ! sad
Je vais lire tout ce que vous avez répondu et faire ce qu'il faut !
Je reviens vers vous le plus rapidement possible smile

Merci à tous

Dernière modification par Ast (09-01-2014 21:10:40)

Hors ligne

#12 09-01-2014 21:23:33

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

Voilà comme promis... wink

#! /bin/bash

# Saisi chemin source et destination
read -p 'Entrez le chemin absolu du dossier source : ' dossierSource
echo "dossierSource=$dossierSource"
echo
read -p 'Entrez le chemin absolu du dossier de destination : ' dossierDestination
echo "dossierDestination=$dossierDestination"

# Vérification que les deux paramètres sont bien des chemins
if [[ -d $dossierSource ]] && [[ -d $dossierDestination ]]
then echo "ok pour les deux"
else echo "un des chemins n'est pas bon"
fi

# Déplacement fichiers pdf
fichiers=$(find "$dossierSource" -type f -iname "*.pdf")
echo "fichiers=$fichiers"

for i in $fichiers
  do nomfichier=$(echo $i | awk -F "/" '{print $NF}')
  mv "$i" "$dossierDestination/$nomfichier"
done


# Déplacement fichiers odt
fichiers=$(find "$dossierSource" -type f -iname "*.odt")
echo "fichiers=$fichiers"

for i in $fichiers
  do nomfichier=$(echo $i | awk -F "/" '{print $NF}')
  mv "$i" "$dossierDestination/$nomfichier"
done
 



Amicalement Sly

Dernière modification par Slyfox (09-01-2014 22:17:29)

Hors ligne

#13 09-01-2014 21:39:18

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : script bash déplacement fichier avec récursion

@slyfox : tu peux même ajouter le langage aux extraits de code wink

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

En ligne

#14 09-01-2014 22:03:41

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

bendia a écrit :

@slyfox : tu peux même ajouter le langage aux extraits de code wink



Salut bendia

Merci je ne savais pas comment faire pour mette en couleur les codes... maintenant oui ! big_smile

Amicalement Slyfox

Hors ligne

#15 09-01-2014 22:23:46

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : script bash déplacement fichier avec récursion

et voici une version graphique... smile

#! /bin/bash

dossierSource=$(zenity --file-selection  --directory --title="Sélectionnez le dossier source" --filename="/home/$USER/*")

# Si Annuler
[[ $? -eq 1 ]] && exit


dossierDestination=$(zenity --file-selection --directory --title="Sélectionnez le dossier de destination" --filename="/home/$USER/*")

# Si Annuler
[[ $? -eq 1 ]] && exit

echo "dossierSource=$dossierSource"
echo "dossierDestination=$dossierDestination"


# Traitement fichiers pdf
fichiers=$(find "$dossierSource" -type f -iname "*.pdf")
echo "fichiers=$fichiers"

for i in $fichiers
  do nomfichier=$(echo $i | awk -F "/" '{print $NF}')
  mv "$i" "$dossierDestination/$nomfichier"
done


# Traitement fichiers odt
fichiers=$(find "$dossierSource" -type f -iname "*.odt")
echo "fichiers=$fichiers"

for i in $fichiers
  do nomfichier=$(echo $i | awk -F "/" '{print $NF}')
  mv "$i" "$dossierDestination/$nomfichier"
done



Amicalement Sly

Dernière modification par Slyfox (09-01-2014 22:24:21)

Hors ligne

#16 09-01-2014 22:27:22

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

Re : script bash déplacement fichier avec récursion

Je viens de tout lire, je vous remercie pour toutes ces réponses qui m'ont donné pleins d'idées et qui me permette de me rendre compte qu'il y a pleins de façons possible pour répondre à un problème !:D

@MicP: J'ai changé de suite le "shebang" de place ! Je ne savais pas qu'on l'appelais comme ça et je ne pensais pas que les commentaires se trouvant juste avant pouvaient poser problème ! Merci de l'information smile

MicP a écrit :

pourquoi ne pas utiliser plusieurs fonctions

comme:
Je ne savais pas non plus que l'on pouvait utiliser des fonctions en bash (j'ai l'impression que ça fait comme en C avec les procédures que l'on appel dans la fonction principale non? )

MicP a écrit :

la source et la cible peuvent être existantes mais peut-on y lire ou y écrire


Je vais faire la vérification car c'est vrai que ça peut poser des soucis en fonction du répertoire où se trouve les fichiers.


MicP a écrit :

sous linux, le type d'un fichier peut (à coup sûr) être déterminé avec la commande "file".


Mes fichiers ayant tous une extension, je ne voyais pas l'intérêt d'utiliser la commande file.

MicP a écrit :

pourquoi ne pas retourner le ou les paramètres entrés (source ou/et cible) qui sont refusés


Je pensais le faire une fois que j'aurais réussi à faire fonctionner le script, je ne voulais pas m'attarder sur ça pour le moment. Mais merci pour le rappel, ça peut permettre de savoir où se trouve un erreur !

MicP a écrit :

que se passe-t-il si "/rep/fichier_1" et "/rep/sous-rep/fichier_1" sont déplacés dans le même répertoire ?


Je n'avais vraiment pas pensé à cette possibilité là, merci ! smile

Je ne voulais pas utiliser la commande "find" mais elle peut être plus pratique à utiliser pour récupérer le chemin absolu et ensuite déplacer uniquement le fichier, je vais donc l'utiliser, ça devrait être beaucoup plus simple !

MicP a écrit :

Au final, ça fait peut-être beaucoup de petits sous-problèmes à régler, mais c'est tout-à fait normal.
Un petit bout, ensuite un autre petit bout, etc... et ça finira par très bien fonctionner.



Merci beaucoup à toi pour toutes ces remontés de problèmes et d'informations !

@Slyfox:
Merci à toi pour la première partie du script que tu as fais, je vais regarder comment cela fonctionne et m'en inspirer pour la suite du script !
Merci aussi pour ton script complet qui va me permettre d'avoir une base de plus !

@smolski: Merci, je connaissais mais ça fait toujours du bien une petite piqûre de rappel ! cool

@bendia: Merci pour la commande "locate", je n'ai pas pensé à regarder de ce côté là, je vais donc voir ce que je peux obtenir avec elle ! Mais est-il préférable d'utiliser "locate" par rapport à "find" ou pour ce petit script cela n'a pas d'importance ?

@captnfab:Merci à toi aussi pour ta réponse et ton script complet !

captnfab a écrit :

Si j'ai bien compris, tu veux faire un script qui fusionne un dossier dans un autre dossier.


Mon but principal est juste de copier les fichiers, pas l'arborescence complète, mais ton script va aussi me servir pour essayer de  faire du mieux possible pour le mien big_smile



Merci à tous pour vos réponses que ce soit des scripts, des remarques, des conseils ! J'aime vraiment beaucoup la mentalité que l'on trouve dans les logiciels libres ! big_smile
Après avoir répondu à toutes vos réponses, je vais retourner sur le script et vous faire part de mes avancés et des problèmes que je peux rencontrer !

Amicalement
Ast

Hors ligne

#17 09-01-2014 22:30:53

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

Re : script bash déplacement fichier avec récursion

@Slyfox: Eh bah dis donc, tu ne t'arrêtes plus ! tongue
Je crois que j'ai énormément de chose à apprendre sur la programmation !
Depuis un moment je veux m'y mettre mais les cours que j'ai depuis le début de mes études supérieurs ne m'a jamais donné envie !
Je n'ai jamais rien compris à la programmation sauf depuis trois semaines où un prof m'a enfin fait apprécier la programmation car il à tout repris de zéro et qu'il a pris son temps pour tout expliquer !:D

Hors ligne

#18 09-01-2014 22:36:56

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : script bash déplacement fichier avec récursion

locate cherche ses résultats dans la base de donnée des fichiers alors que find cherche sur le disque. Le man dit que cette base de donnée est habituellement mise à jour par cron chaque jour. C'est donc pas forcement hyper à jour contrairement à find, mais c'est probablement plus rapide smile

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

En ligne

#19 09-01-2014 22:43:30

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : script bash déplacement fichier avec récursion


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#20 09-01-2014 23:15:00

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

Re : script bash déplacement fichier avec récursion

Il est donc préférable d'utiliser "find" je pense dans mon cas.
Il suffit que la mise à jour de la BDD n'ai pas encore été faite et que je veuille déplacer des fichiers créés dans les 24h, et qui ne sont peut être pas encore repertorier, pour ne pas le déplacer. Sinon il suffit juste de faire la mise à jour en début de script pour que ça fonctionne parfaitement !

Hors ligne

#21 10-01-2014 00:04:19

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : script bash déplacement fichier avec récursion

Ast a écrit :

Mon but principal est juste de copier les fichiers, pas l'arborescence complète, mais ton script va aussi me servir pour essayer de  faire du mieux possible pour le mien big_smile


Dans ce cas :

#!/bin/sh
find $1 -type f -exec mv {} $2 \;



smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#22 10-01-2014 00:06:09

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : script bash déplacement fichier avec récursion

Ast a écrit :

Je pense que c'est possible de faire ceci avec un "find" mais je préfère essayer avec un script



wink


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

En ligne

#23 10-01-2014 00:37:44

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : script bash déplacement fichier avec récursion

Yep smile
C'était pour voir si tu suivais ? ? ? ? ?

En fait, même le contenu de mon script est réalisable en find :

#!/bin/sh
cd $1
find -type f -exec sh -c 'DEST='$2'/$(dirname {}) ; mkdir -p "$DEST" ; mv {} "$DEST"' \;



À vérifier smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#24 10-01-2014 01:02:27

Ast
Membre
Distrib. : GNU/Linux Debian Wheezy
Noyau : Linux 3.2.0-4-686-pae
(G)UI : xfce
Inscription : 08-01-2014

Re : script bash déplacement fichier avec récursion

J'ai commencé à faire le script à l'aide de la commande "find", le script fonctionne bien !
Maintenant, il faut que je fasse les tests nécessaire pour éviter le plus possible d'erreur lors de l'utilisation de ce dernier !

Je pense que je mettrais une version du script durant le week-end !;)

Hors ligne

#25 11-01-2014 11:03:49

MicP
Invité

Re : script bash déplacement fichier avec récursion

Des bon tuyaux là

Étant donné que j'essaie de préserver mes beaux yeux, j'ai légèrement modifié l'original après l'avoir recopié et hébergé.

Au sujet du petit problème que tu avais rencontré concernant les changements de répertoire, le premier paragraphe de cette page pourrais aussi t'intéresser.

Pied de page des forums