Création automatique de sous-dossiers

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.

J’ai vu sur un blog hier une procédure qui permettait de créer automatiquement des sous-répertoires en incluent une fonction dans le .bashrc.

mkmod() { mkdir "$1" mkdir "$1/files" "$1/lib" "$1/manifests" "$1/templates" "$1/tests" }

Source : http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/

Dans ton cas tu pourrais peut-être remplacer par :

mkmod_comm() { mkdir_comm "$1" mkdir "$1/contrat" "$1/demarches\ commerciales" "$1/prospection" }

Evites au maximum les espaces et accents. Je ne sais pas comment tu pourrais rendre cette fonction accessible par ton utilisateur (il est sous Linux ou bien passes-tu par samba?)

Il suffit d’inclure ce code dans le .bashrc?

Re, avec l’option -p :

mkdir -p Commercial/contrat/démarches\ commerciales/prospection

Attention, s’il y a un espace dans un nom de dossier, il faut échapper l’espace par un antislash .

Par exemple dans ton «.bashrc» tu peux mettre :

alias mkcommercial='mkdir -p "Commercial/contrat" "Commercial/demarches\ commerciales" "Commercial/prospection"' }

Après il suffit d’exécuter dans une console :

Merci pour vos réponses. Mais deux choses:

  • Cette routine ne dois pas écraser les sous-dossiers déjà crées. Je craint que ce soit le cas avec les commandes que vous me donnez.
  • Les dossiers commerciaux portent un numéro unique (commercial_20125594). Il va donc falloir rendre la commande intelligente.

Je suis en train de regarder avec mkdir -p commercial_*/sous-dossier
Mais ça ne fonctionne pas.

Le script de Chr0my le fait avec le «$1»

alias mkcommercial='mkdir -p "Commercial_$1/contrat" "Commercial_$1/demarches\ commerciales" "Commercial_$1/prospection"' }

Après il suffit d’exécuter dans une console :

Pour le reste regasde le man de mkdir :
pwet.fr/man/linux/commandes/mkdir

J’ai réusii à faire à peu près ce que ke voulais avec ce script:

#!/bin/bash inotifywait -qme create --format '%w%f' /home/xxx/SHARE | while read f; do if [ -d $f ]; then mydir=`$f`; mkdir -p $f/{AdminFacturation,"DocsClient","DocsTLS","PropositionCommerciale"} fi done exit 0

Ca marche bien en ligne de commande mais pas directement à partir du partage depuis une machine Windows.

Haaa non ça c’est sur !
Une création de répertoire (par NFS ?) ne pourras pas exécuter un script de ton serveur … :033

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

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

Merci

Salut
regarde du coter de inotify pour surveiller des fichier. après il faut savoir coder un peux pour gérer tes répertoires, en shell, dans une autre langage comme le c++ / C etc;)

Justement, je cherche à faire cela sans inotify pour des raisons de simplicité.
Une simple tâche cron qui ira chercher dans chaque dossiers si les sous-dossiers existent ou non.

[quote=“baxterx”]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

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[/quote]En inversant le résultat de find…
=> en mettant une négation devant ce que tu cherches…

find / ! -name "DocsTLS" -type d 2>/dev/null (me suis permis d’ajouter “aussi” le “2>/dev/null” pour “virer” les messages d’erreur éventuels (non… j’bosse pas chez 'crosoft… c’est juste que si c’est dans script, les “permission denied” et autres risqueraient de poser quelques petits pb…)

:006

[quote=“baxterx”]Justement, je cherche à faire cela sans inotify pour des raisons de simplicité.
Une simple tâche cron qui ira chercher dans chaque dossiers si les sous-dossiers existent ou non.[/quote]
sa va marcher tant que la charge du proc est pas forte. mai si sa change sa va poser souci en plus un find c’est pas economique pour la durée de vie pour les disque surtout si c est un ssd!

Ce n’est pas un SSD mais cette solution ne me plait plus trop à cause des inconvénients que tu viens de citer.

Je ne faisais que répondre à ta question sur le “find”… :wink:

J’ai bien pensé à utiliser un “squelette” (cf /etc/skel) mais visiblement ça n’existe (au niveau des répertoires) que pour /home et ça créé les répertoires à la création de l’utilisateur… du coup… dans ton cas… ça correspond pas… je pense…

Peut-être, mais alors pas sûr du tout du tout (connais très peu ce sujet, faudra bien que je m’y mette… :blush: … un jour… :whistle: ), voir du coté “SELinux” (couche de sécurité supplémentaire…), vu les possibilités de la bestiole et la “finesse” des réglages possibles… y’a peut-être moyen… mais encore une fois… ce n’est qu’une supposition, je connais très mal ce sujet… (la seule fois où j’ai eu une formation dessus, le formateur n’arrivait pas à mettre en place ce qu’il voulait nous faire voir, et ça avait des effets de bords, comment dire, parfois surprenant voir même handicapant dans certains cas… après… vu que le formateur n’arrivait pas à faire ce qu’il voulait, le pb venait certainement de là… :whistle: )…

:006

Je suis en train d’essayer ce que tu me proposes plus, et ça me semble pas mal du tout. :033

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? :smiley:

Donc comment faire pour éviter cela?

Merci

j’ai l’impression que tu te compliques la vie au contraire.
un exemple avec pyinotify (aptitude install python-pyinotify)

[code]# Notifier example from tutorial

See: http://trac.dbzteam.org/pyinotify/wiki/Tutorial

import pyinotify

wm = pyinotify.WatchManager() # Watch Manager
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE # watched events

class HandleEvents(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
print “Creating:”, event.pathname

def process_IN_DELETE(self, event):
    print "Removing:", event.pathname

p = HandleEvents()
notifier = pyinotify.Notifier(wm, p)
wdd = wm.add_watch(’/tmp’, mask, rec=True)

notifier.loop()
[/code]
et ça marche de suite.

Ok, par contre, ton script il se met ou?
Deuxième chose, comment créer des sous-dossiers dans une liste de dossier? Je pense que cela me sera au moins aussi utile.