Création automatique de sous-dossiers - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 22-11-2012 à 16:27:03
man mkdir => mkdir -p
Marsh Posté le 22-11-2012 à 17:01:35
Merci mais je connais la commande mkdir avec -p.
Ce que j'aimerai savoir c'est comment tu fais pour une liste de dossiers?
Marsh Posté le 22-11-2012 à 17:14:53
Mc Kagan a écrit : |
{a,b,c}
Marsh Posté le 22-11-2012 à 17:20:50
Vous étés facturé au nombre de caractère saisi sur le clavier ou quoi?
Est ce que tu pourrais développer?
Marsh Posté le 22-11-2012 à 20:57:16
salut,
Code :
|
c'est plus clair comme ça ?
Marsh Posté le 22-11-2012 à 23:09:08
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"} |
[ oggy@monsen ~/Documents ] |
\oi/
Marsh Posté le 23-11-2012 à 01:04:47
Mc Kagan a écrit : Bonjour, |
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
Marsh Posté le 23-11-2012 à 10:08:37
o'gure a écrit : iUn poil plus explicite que les autres forumeurs/modos dont on aura la peau car ils sont fascho |
Merci!
Marsh Posté le 23-11-2012 à 11:38:16
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 |
Pas testé, pas débuggé, vaguement copié d'ici, crade
A voir aussi ça pour un truc plus propre, et aussi ça pour une meilleure gestion des processus.
Marsh Posté le 23-11-2012 à 12:15:05
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
Marsh Posté le 23-11-2012 à 13:05:37
Non mais... c'est du script bash
Si tu veux le faire avec les outils de base, tu vas avoir du mal...
Marsh Posté le 27-11-2012 à 17:05:08
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.
Marsh Posté le 28-11-2012 à 15:48:28
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 |
Marsh Posté le 28-11-2012 à 15:50:26
Il me semble que j'avais essayé avec plusieurs dossiers et ça fonctionnait à chaque fois. Je vais ressayer pour confirmer.
Marsh Posté le 03-01-2013 à 12:35:09
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 :
|
Maintenant comment faire l'inverse? Liste les dossiers qui ne contiennt pas ce sous-dossier pour du coup le créer?
Merci
Marsh Posté le 03-01-2013 à 23:03:13
#!/bin/bash |
Google, 3ème réponse, 5 secondes
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 |
En méthode pas trop brutos (toujours crade/non testé/non optimisé), ça donnerait :
#!/bin/bash |
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
Marsh Posté le 04-01-2013 à 09:30:04
bardiel a écrit : |
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.
Marsh Posté le 05-01-2013 à 13:38:26
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
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.
Marsh Posté le 10-01-2013 à 14:56:43
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
Marsh Posté le 10-01-2013 à 16:43:09
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)
Marsh Posté le 10-01-2013 à 17:03:34
Voici pour le script:
Code :
|
Deuxième chose, comment créer des sous-dossiers dans une liste de dossier? Je pense que cela me sera au moins aussi utile.
Marsh Posté le 11-01-2013 à 10:55:48
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é
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 )
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 )
/emplacement/toto |
- un script :
#!/bin/bash |
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 |
je passe à ça :
/emplacement/toto/sous-dossier1 |
Marsh Posté le 11-01-2013 à 12:06:50
Bon.... ça me semble pas mal tout ça. Je vais bûcher de mon coté
Marsh Posté le 22-11-2012 à 16:02:06
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.