Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1010 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Création automatique de sous-dossiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création automatique de sous-dossiers

n°1325213
Mc Kagan
Posté le 22-11-2012 à 16:02:06  profilanswer
 

Bonjour,
 
Je souhaite créer automatiquement des sous-dossiers lors de la création d'un dossier.
Par exemple:
Un utilisateur crée un dossier "Commercial" sur un lecteur réseau. Lors de la création de ce dossier, 3 sous-dossiers doivent être crées.
Un dossier "contrat", "démarches commerciales" et "prospection".
 
Mon problème est que je ne vois pas comment réaliser cela.
La deuxième solution, peut être plus simple, est de planifier une tâche qui va passer en revue les dossier nouvellement crées dans la journée et d'y créer les nouveaux sous-dossiers.
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 22-11-2012 à 16:02:06  profilanswer
 

n°1325215
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 22-11-2012 à 16:27:03  profilanswer
 

man mkdir => mkdir -p


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1325218
Mc Kagan
Posté le 22-11-2012 à 17:01:35  profilanswer
 

:heink:  
Merci mais je connais la commande mkdir avec -p.
Ce que j'aimerai savoir c'est comment tu fais pour une liste de dossiers?

Message cité 1 fois
Message édité par Mc Kagan le 22-11-2012 à 17:01:47
n°1325220
Fork Bomb
Obsédé textuel
Posté le 22-11-2012 à 17:14:53  profilanswer
 

Mc Kagan a écrit :

:heink:  
Merci mais je connais la commande mkdir avec -p.
Ce que j'aimerai savoir c'est comment tu fais pour une liste de dossiers?


{a,b,c}


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1325221
Mc Kagan
Posté le 22-11-2012 à 17:20:50  profilanswer
 

Vous étés facturé au nombre de caractère saisi sur le clavier ou quoi?
Est ce que tu pourrais développer?


Message édité par Mc Kagan le 22-11-2012 à 17:21:06
n°1325229
Profil sup​primé
Posté le 22-11-2012 à 20:57:16  answer
 

salut,
 

Code :
  1. $ echo a/{b,c,d}
  2. a/b a/c a/d

c'est plus clair comme ça ?

n°1325232
o'gure
Modérateur
Multi grognon de B_L
Posté le 22-11-2012 à 23:09:08  profilanswer
 

iUn poil plus explicite que les autres forumeurs/modos dont on aura la peau car ils sont fascho

mkdir -p a/{contrat,"démarches commerciales","prospection"}


[:opus dei]

[ oggy@monsen ~/Documents ]
> tree a                                                    
a
├── contrat
├── démarches commerciales
└── prospection


\oi/

Message cité 1 fois
Message édité par o'gure le 22-11-2012 à 23:21:04
n°1325234
Profil sup​primé
Posté le 23-11-2012 à 01:04:47  answer
 

Mc Kagan a écrit :

Bonjour,
 
Je souhaite créer automatiquement des sous-dossiers lors de la création d'un dossier.
Par exemple:
Un utilisateur crée un dossier "Commercial" sur un lecteur réseau. Lors de la création de ce dossier, 3 sous-dossiers doivent être crées.
Un dossier "contrat", "démarches commerciales" et "prospection".
 
Mon problème est que je ne vois pas comment réaliser cela.
La deuxième solution, peut être plus simple, est de planifier une tâche qui va passer en revue les dossier nouvellement crées dans la journée et d'y créer les nouveaux sous-dossiers.
 
Merci d'avance pour votre aide.


 
Si on me demandait de faire ça:
1. je dirai que ça doit pas être fait sur le serveur de fichiers (qui fournit un système de fichiers standard et rien d'autre)
2. je bricolerai un truc avec inotify pour déclencher une commande à la détection de la création d'un dossier

n°1325243
Mc Kagan
Posté le 23-11-2012 à 10:08:37  profilanswer
 

o'gure a écrit :

iUn poil plus explicite que les autres forumeurs/modos dont on aura la peau car ils sont fascho


 
Merci!

n°1325257
bardiel
Debian powa !
Posté le 23-11-2012 à 11:38:16  profilanswer
 

[:predicator] pour BlockDevice pour inotify, même si ce dernier travaille dans les évènements sur les créations de fichiers et dossiers. Pour peu que l'on souhaite surveiller que la création de dossier ça risque d'être délicat non ? donc ajouter du test pour savoir si c'est bien un dossier qui a été créé.
De plus cela oblige soit d'avoir un moniteur sur le serveur, avec un envoi par mail régulier, ou d'avoir le moniteur sur sa machine avec un accès complet aux partages depuis sa machine (root ou utilisateurs avec les droits nécessaires).
Vu que le 2ème cas peut s'avérer problématique, autant rester sur le serveur.
 
Je partirais donc sur un script bash à partir d'inotify, mais directement sur le serveur :

#!/bin/bash
 
inotifywait -qme create --format '%w%f' /partage | while read f; do
 
if [ -d $f ];
then
    mydir=`basename $f`;
    echo "$mydir is a new directory";
    mkdir -p $f/{contrat,"démarches commerciales","prospection"}
fi
done
 
exit 0


Pas testé, pas débuggé, vaguement copié d'ici, crade [:yiipaa:4]  
A voir aussi ça pour un truc plus propre, et aussi ça pour une meilleure gestion des processus.


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
mood
Publicité
Posté le 23-11-2012 à 11:38:16  profilanswer
 

n°1325258
Mc Kagan
Posté le 23-11-2012 à 12:15:05  profilanswer
 

C'est très probablement efficace, mais ça me parait assez lourd à mettre en place. Je vais me concentrer sur les scripts pour le moment

n°1325267
bardiel
Debian powa !
Posté le 23-11-2012 à 13:05:37  profilanswer
 

Non mais... c'est du script bash :D
Si tu veux le faire avec les outils de base, tu vas avoir du mal...


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1325291
Mc Kagan
Posté le 23-11-2012 à 14:38:17  profilanswer
 

Bon....

n°1325510
Mc Kagan
Posté le 27-11-2012 à 17:05:08  profilanswer
 

Ton script Bardiel, il démonte tout! C'est ce qu'il me fallait ;)

 

Par contre ça fonctionne pas à partir du partage. Par exemple lorsque j'accède à un partage depuis Windows et que je crée un dossier, ça ne fonctionne pas.


Message édité par Mc Kagan le 27-11-2012 à 17:15:34
n°1325540
bardiel
Debian powa !
Posté le 28-11-2012 à 15:48:28  profilanswer
 

Sauf que le script là, il s'arrête au 1er dossier crée. Donc si par la suite tu en crée d'autres le script ne s'exécute plus :/
Donc avec une petite boucle infinie (à tuer par un kill) ça donnerait :

#!/bin/bash  
while :
do
inotifywait -qme create --format '%w%f' /partage | while read f; do  
 
if [ -d $f ];  
then  
    mydir=`basename $f`;  
    mkdir -p $f/{contrat,"démarches commerciales","prospection"}  
fi  
done  
done


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1325541
Mc Kagan
Posté le 28-11-2012 à 15:50:26  profilanswer
 

Il me semble que j'avais essayé avec plusieurs dossiers et ça fonctionnait à chaque fois. Je vais ressayer pour confirmer.

n°1327653
Mc Kagan
Posté le 03-01-2013 à 12:35:09  profilanswer
 

Je me permets de relancer le sujet. Pour des raisons de simplicité, je compte mettre en place une tâche planifiée qui va créer ces sous-dossiers, si ils n’existent pas à une heure précise.
Mon problème est de savoir comment "scanner" les dossiers présents pour y ajouter les sous-dossiers si ils n’existent pas.

 

J'ai avancé un peu. En gros je liste les dossiers qui contiennent les sous-dossiers en question avec la commande suivante

Code :
  1. find / -name "DocsTLS" -type d


Maintenant comment faire l'inverse? Liste les dossiers qui ne contiennt pas ce sous-dossier pour du coup le créer?

 

Merci


Message édité par Mc Kagan le 03-01-2013 à 15:42:48
n°1327693
bardiel
Debian powa !
Posté le 03-01-2013 à 23:03:13  profilanswer
 

#!/bin/bash
if [ -d /path/to/dir ]; then
 # le répertoire existe
else
 # le répertoire n'existe pas
fi


Google, 3ème réponse, 5 secondes [:the geddons]  
 
En gros tu inclus dans ta boucle de création de dossiers un test pour savoir si le dossier (directory, donc -d ) existe ou non. Par rapport à toi c'est l'inverse que l'on veut (l'absence des dossiers) donc :

#!/bin/bash
if [ ! -d /path/to/dir ]; then
 # le répertoire n'existe pas
else
 # le répertoire existe
fi


En méthode pas trop brutos (toujours crade/non testé/non optimisé), ça donnerait :

#!/bin/bash
while read line
do
f=$line/prospection
if [ ! -d $f ]; then  
 # le répertoire n'existe pas  
 mkdir -p $f/{contrat,"démarches commerciales","prospection"}
fi
done < <(find /partage/ -type d  -maxdepth 1 -print)


A noter que là je ne fais le test que sur le sous-dossier "prospection", il faudrait le faire pour chaque sous-dossier à créer... mais bon on va supposer que si ce dossier n'est pas présent, les autres non plus :D


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1327702
Mc Kagan
Posté le 04-01-2013 à 09:30:04  profilanswer
 

bardiel a écrit :


Google, 3ème réponse, 5 secondes [:the geddons]  


Merci mais j'avais déja essayé ce tuto. Si je post ici c'est pour avoir plus d'information...
Mais merci quand même je vais essayer ce que tu décris.


Message édité par Mc Kagan le 04-01-2013 à 09:50:44
n°1327802
bardiel
Debian powa !
Posté le 05-01-2013 à 13:38:26  profilanswer
 

L'inconvenient c'est que find ne dispose pas d'une option contraire (dire "il manque le dossier Xa dans les dossiers A1, B8 et C3" ), donc il faut en gros tester l'absence des dossiers à créer (qui devraient être présents) sur chaque dossier de la racine de travail [:spamatounet]  
En torchant mieux le dernier script que j'ai indiqué, notamment l'adapter par rapport à cron avec un find sur le temps (dossiers créés les 6-12-24 dernières heures, pas besoin de tester un dossier créé il y a 6 mois...) et dans un environnement de production, ça devrait le faire.


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1328086
Mc Kagan
Posté le 08-01-2013 à 16:16:37  profilanswer
 

Ok, je regarde ça. merci

n°1328256
Mc Kagan
Posté le 10-01-2013 à 14:56:43  profilanswer
 

J'ai super bien avancé grâce à vos conseils! Par contre, j'ai un dernier problème. Lorsque la première boucle crée les sous-dossiers, la deuxième qui vas créer l'autre dossiers va aussi en créer un dans le sous-dossier précédemment crée.
Est-ce clair?    
 
Donc comment faire pour éviter cela?
 
Merci

n°1328273
bardiel
Debian powa !
Posté le 10-01-2013 à 16:43:09  profilanswer
 

Il ressemble à quoi ton script au final ? A ce que j'ai indiqué auparavant ?
Si oui, normalement il ne va crée les 3 sous-dossiers que dans le dossier courant, car on a précisé au find une profondeur de 1.  
Si non, tu ajoutes un test de présence pour chaque sous-dossier du dossier courant (/partage) avec un find d'une profondeur de 1.
 
J'avais d'ailleurs oublié de t'indiquer l'option -ctime (voir le grand gogole pour les précisions dessus)


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1328279
Mc Kagan
Posté le 10-01-2013 à 17:03:34  profilanswer
 

Voici pour le script:

 
Code :
  1. for DOCTLS in `find Prospection_* ! -name "DocsTLS" -type d`
  2. do
  3. mkdir -p $DOCTLS/DocsTLS
  4. done
  5. for DOCSCLIENT in `find Prospection_* ! -name "DocsClient" -type d`
  6. do
  7. mkdir -p $DOCSCLIENT/DocsClient
  8. done
 

Deuxième chose, comment créer des sous-dossiers dans une liste de dossier? Je pense que cela me sera au moins aussi utile.


Message édité par Mc Kagan le 10-01-2013 à 17:04:13
n°1328308
bardiel
Debian powa !
Posté le 11-01-2013 à 10:55:48  profilanswer
 

Pour le script, il vaudrait mieux ne pas trop utiliser les mêmes dénominations entre dossier de travail et variable, et mettre le test de non-présence que j'avais utilisé [:spamatounet]  
Ensuite je mettrais du chemin absolu depuis la racine, si ton script n'est pas exécuter depuis l'emplacement des dossiers, ce qui pour du dossier clientèle est quand même mieux... on ne mélange pas les oignons et les choux de Bruxelles, donc tu mets tes scripts ailleurs qu'avec les données utilisateurs.
Enfin il manque un -maxdepth 1 à tes find.
Bon le script que j'avais proposé était quand même un poil mieux (le gars qui ne se lance pas des fleurs [:the geddons] )
 
Pour ton autre question, toujours voir le même script que le dernier que j'ai proposé, mais en utilisant un cat d'un fichier (au format texte Unix) avec une extraction ligne à ligne soit :
- un fichier "source.txt" (ouais pas taper, l'extention txt n'existe officiellement pas sous Linux et Unix, je sais :o )

/emplacement/toto
/emplacement2/tata
/emplacement3/titi


- un script :

#!/bin/bash  
while read line  
do  
f=$line
mkdir -p $f/{"sous-dossier1", "sous-dossier2"}  
fi  
done << cat source.txt


Donc dans une arborescence à la partir de la racine où j'ai :
- un dossier emplacement, sous-dossier toto
- un 2ème dossier emplacement2, sous-dossier tata
- un 3ème dossier emplacement, sous-dossier titi
A chaque, je crée 2 sous-sous dossiers "sous-dossier1" et "sous-dossier2".
Soit de

/emplacement/toto
/emplacement2/tata
/emplacement3/titi


je passe à ça :

/emplacement/toto/sous-dossier1
/emplacement/toto/sous-dossier2
/emplacement2/tata/sous-dossier1
/emplacement2/tata/sous-dossier2
/emplacement3/titi/sous-dossier1
/emplacement3/titi/sous-dossier2


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1328315
Mc Kagan
Posté le 11-01-2013 à 12:06:50  profilanswer
 

Bon.... ça me semble pas mal tout ça. Je vais bûcher de mon coté ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Création automatique de sous-dossiers

 

Sujets relatifs
Supprimer certains fichiers de dossiers et sous dossiersPage Web Création Users
[résolu] .directory , dans les dossiersClonage partition automatique ? partition secours
création d'un nouveau serveur osus ubuntuGentoo - Désactiver démarrage automatique de Proftpd
Dual boot Seven / Ubuntu, ordre création de partitionCapture de son automatique
montage automatique disque dur externe (USB) lecture/écriture [résolu]Effacer un repertoire dans un dossier et ses sous-dossiers
Plus de sujets relatifs à : Création automatique de sous-dossiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR