10.11 El Capitan Création de dossier à partir d'une liste de Noms

omni

Membre expert
Club iGen
17 Mars 2007
1 244
45
Bonjour,
J'ai hésité à poster ici où dans la section applications puisque le Finder n'est finalement qu'une application…
Bien, soit 229 "noms" qui doivent devenir 229 dossiers les uns en dessous des autres par ordre alphabétique.
Existe-t-il un moyen simple de transformer une liste Excel, ou TXT en 229 dossiers distincts ?
Ou dois-je créer ces dossiers un par un dans le finder ?

Merci de vos lumières !
 
Bonne question... Peut-être via le Terminal? Ou au pire une App tiers?

Attends les spécialistes ;)
 
Et sinon, via xCode et un playground (très simple à mettre en oeuvre pour cet exemple précis).
Le code suivant te crée deux fichiers "name1" et "name2" sur ton bureau.
Il faut que tu remplaces "le_nom_de_ta_petite_maison" par ton nom d'utilisateur.



Bloc de code:
import Cocoa

let manager = FileManager.default

let names = ["name1","name2"]
let defaultPath = "/Users/le_nom_de_ta_petite_maison/Desktop/"
for aName in names {
    let pathName = defaultPath + aName

    do
            {
        try  manager.createDirectory(atPath: pathName, withIntermediateDirectories: false, attributes: nil)
    }
       
    catch {
        print("erreur")
    }
}
 
sinon une autre possibilité en script bash : tu crees un fichier dans un dossier dans ton répertoire de départ contenant ta liste de dossier à créer
(supposons qu'elle s'appelle mesrep.txt). Le fichier mesrep.txt contient un nom de dossier à créer par ligne.
Bloc de code:
toto
titi

Tu enregistres dans un fichier texte que tu renommes cree_rep.sh dans ton répertoire /users/TONNOM/dossiers (pour moi ici c'est /users/christian/dossiers)

Bloc de code:
if [ $# != 1 ]
then
   echo "usage : $0 nomfichier"
   exit 2
fi
if [ ! -f $1 ]
then
    echo "Erreur: le fichier $1 n'existe pas"
    exit 3
fi
cat $1 | ( while read ligne
do
 echo "mkdir $ligne"
 mkdir $ligne
done
)

Ensuite tu execute la commande suivante :
Bloc de code:
christian@imac:[~/dossiers]:chmod 755 cree_rep.sh
christian@imac:[~/dossiers]:

et tu tapes:

Bloc de code:
christian@imac:[~/dossiers]:./cree_rep.sh mesrep.txt
toto
titi
christian@imac:[~/dossiers]: ls -l
-rwx------   1 christian  staff   210B 16 déc 19:34 cree_rep.sh*
-rw-r--r--   1 christian  staff    10B 16 déc 19:29 mesrep.txt
drwxr-xr-x   2 christian  staff    68B 16 déc 19:34 titi/
drwxr-xr-x   2 christian  staff    68B 16 déc 19:34 toto/
christian@imac:[~/dossiers]

Et voila tu n'as plus qu'à déplacer l'arborescence créée, ou tu le souhaites par le finder.


Je sais, il y a plus simple...
 
Dernière édition:
Je tiens à vous remercier tous pour vos informations que je vais tester. Tester car mon niveau dès qu'il s'agit de taper des commandes est comment dire ? Lamentable ? Pitoyable ? Enfin je vais essayer et je vous tiens au courant.
Automator j'y avais pensé mais je n'ai pas trouvé les instructions qui me paraissaient convenir ?
 
Bonsoir,

Vu ta réaction, je te suggère :

1 - tester le script suivant dans l'application "Editeur de script"

Bloc de code:
set folderNames to {"aaa", "bbb"}

tell application "Finder"   
    set p to path to desktop
    repeat with aName in folderNames
        make new folder at p with properties {name:aName}
    end repeat
end tell

Ce script te crée un dossier "aaa" et un dossier "bbb" sur ton bureau.
Il est très simple, et ne gère pas les cas où ces dossiers existent déjà, ni le cas de doublon de noms dans ta liste.

Replace "aaa", "bbb" par d'autres noms, teste le script.

2- Utilise Excel ou Numbers pour transformer ta liste de 229 noms en quelque chose qui ressemble à "nom1","nom2","nom3"...."nom229" (si tu ne sais pas faire, cherche un peu et demande de l'aide si besoin).

Tu colles cette chaîne de caractères là où j'ai mis "aaa","bbb".

Et hop, tu auras tes 229 dossiers sur le bureau.
Dossiers que tu peux sélectionner et déplacer ailleurs.

On peut faire plus compliqué, en gérant le dossier dans lequel tu veux tes 229 dossiers, en gérant les doublons etc... mais là, tu as quelque chose d'assez simple et qui devrait répondre à ton besoin.

Bon courage,
Cordialement
Nicolas
 
Et bien Nicolas : Merci ! Simple, net, efficace.
J'ai testé avec quelques noms et c'est nickel. Demain je tente les 229 !
Et effectivement je n'aurais plus qu'à les transférer dans le bon dossier.
Merci beaucoup.
 
Bonsoir,

Un script applescript peu faire l'affaire.

Tu crées ta liste dans un fichier texte avec séparateur tabulation
Puis tu lance le script ci dessous
Il te demande de choisir dans quel dossier tu veux créer tes nouveau dossier (dossier cible), puis il te demande de sélectionner ta liste et c'est tout.

tell application "Finder"

set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
set laliste to choose file with prompt "Sélectionnez le fichier liste"
my inspecter(chemincible, laliste)
end tell

on inspecter(cible, liste1)

set dossiercible to cible as string


open for access liste1
read liste1
set tout_le_fichier to the result
close access liste1
set AppleScript's text item delimiters to (ASCII character 13)
set toutes_les_lignes to (every text item of tout_le_fichier) as list
set AppleScript's text item delimiters to ""
set tout_le_fichier to ""


repeat with une_ligne in toutes_les_lignes
tell application "Finder"

make new folder at dossiercible with properties {name:une_ligne}

end tell
end repeat
end inspecter

tell application "Finder"
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
:coucou: omni & alii

Pourquoi compère maco (spécialiste de la prose Française à rallonges) > ne se paierait-il pas une petite plaisanterie vespérale ? - immiscer dans ce fil où le script s'étale une commande de «Terminal» laconique ?

Supposons (en exemple) que ton fichier liste s'intitule : Liste.txt > tu crées sur ton Bureau un dossier vide intitulé (en exemple encore) : BROL > et tu déplaces le fichier Liste.txt dans le dossier BROL.

Tu ouvres une fenêtre du «Terminal» (at: Applications > Utilitaires) > dans la fenêtre qui s'ouvre > tu fais un copier-coller direct de la commande :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs mkdir
et ↩︎ (presse la touche "Entrée" du clavier pour activer la commande).

=> c'est fait : les entrées de ton fichier Liste.txt ont généré une série d'autant de dossiers de même intitulé à l'intérieur du dossier BROL > à côté du fichier paradigme Liste.txt.

[Comble de laconisme : pas d'explicitation de la commande
361608_original.png
]
 
Dernière édition par un modérateur:
[…] ton fichier liste s'intitule : Liste.txt
[…]
tu fais un copier-coller direct de la commande :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs mkdir
et ↩︎ (presse la touche "Entrée" du clavier pour activer la commande).

=> c'est fait : les entrées de ton fichier Liste.txt ont généré une série d'autant de dossiers de même intitulé à l'intérieur du dossier BROL > à côté du fichier paradigme Liste.txt.

[Comble de laconisme : pas d'explicitation de la commande
361608_original.png
]
C'est très simple et élégant, mais n'y a-t-il pas certaines contraintes quant au contenu du fichier Liste.txt ?
:shy:

Notamment, en supposant que les noms des dossiers à créer sont placés chacun sur une ligne, séparés donc par un retour à la ligne, que se passera-t-il si certains de ces noms contiennent des espaces ? des caractères accentués ?

[Edit] La commande cat est-elle ce qui permet de s'affranchir de ces préoccupations ?
 
Moi qui suis tellement prolixe dans mes billets en prose > je m'étais donné la contrainte humoristique : sois laconique !

Ma première mouture :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs mkdir
y réussit (je pense) tout en fonctionnant bien - mais en prêtant le flanc à 2 critiques :

- j'abuse des chemins relatifs ;

- cat gère bien les caractères accentués dans les entrées d'un fichier > et exporte bien d'un seul tenant des lignes comportant des mots séparés > mais ma commande en l'état, pour toute ligne comportant plusieurs termes séparés, va créer autant de dossiers que de termes isolés > au lieu de les traiter comme des intitulés uniques pour chaque ligne induisant la création chaque fois d'un seul dossier au nom composé (baron a raison sur ce point).​

Alors je revois ma copie > tout en essayant de préserver l'« impératif catégorique » (contre-nature) : sois laconique ! (lequel, comme on le voit, ne s'applique pas chez moi à la prose française).

Manifestement > je me suis montré trop elliptique dans la gestion de xargs au final > si donc je rajoute quelques petites instructions idoines > j'obtiens un :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs -tI % mkdir %
qui par l'effet de ces petites roueries va créer des dossiers honorant bien les intitulés ligne à ligne - y compris ceux comportant plusieurs termes séparés qui ne vont pas être distribués en autant de dossiers distincts.

Malheureusement > on peut trouver (d'un point de vue esthétique - s'entend) que la partie terminale de la commande :
Bloc de code:
-tI % mkdir %
n'est pas très jolie (visuellement parlant). Parce que passer des commandes moches (quoique efficaces) > ça finit par offusquer la vision.

Alors voici une petite variante histoire de ne pas avoir un aileron droit de la commande offrant ce visuel ingrat :
Bloc de code:
cd Desktop/BROL ; xargs -tI % mkdir % < Liste.txt
> comme on peut le voir > la commande opère avec le même succès que la précédente > mais elle offre visuellement un effet "panoramique" > au sens où l'aileron gauche : cd Desktop/BROL donne l'impression d'avancer vers l'horizon central du dossier ; mais où l'aileron droit : < Liste.txt donne l'impression symétrique de rentrer vers l'espace médian des opérateurs > la partie moche de la commande : xargs -tI % mkdir % se trouvant en somme tassée à coups de poings au milieu.

[Tout le monde aura compris que le samedi, c'est déjà dimanche : l'heure de la ré-cré a sonné !
361608_original.png
]
 
  • Haha
  • J’aime
Réactions: baron et iDanGener
Pour chipoter on pourrait recommander d'utiliser cd ~/Desktop/BROL pour permettre à l'utilisateur de lancer terminal (ou iTerm) de n'importe quel dossier.
L'utilisateur ayant le chic pour faire souvent autre chose que ce qu'on lui dit, non pas faute de mauvaise volonté mais simplement que la ligne de commande n'est pas le plus simple à appréhender pour le premier MacUser venu.

cf. ce billet qui m'amuse toujours : https://inconshreveable.com/04-26-2016/launching-equinox-and-the-importance-of-software-packaging/
Three years ago I launched ngrok.com - a tunneling reverse proxy service. As part of that, I distribute a command-line tool available on all major platforms (and many minor ones, too). It has given me the privilege to watch users fail to install software in every possible way. Your users will download your software for the wrong operating system, for the wrong computer architecture and they will install older versions from third-party distributors. They will double-click command line apps, paste terminal commands into web browsers and try to run unzip on tar.gz archives. They do not know how to change their PATH environment variable or what it even is. They will try to run your software on machines built 20 years ago without the SSE2 instruction set.
 
Je reviens sur ce fil et je loue ma sacro sainte paresse qui m'a empêché de créer mes 229 dossiers ce WE.
Du coup je vais pouvoir essayer vos différentes solutions.
Question pour Macomaniac : si je comprends bien les noms dans le fichier texte doivent être l'un en dessous de l'autre ? Mon fichier original = un .xls. => une colonne avec 229 lignes.
Deuxième question : effectivement les noms des dossiers pourront être composés avec des accents et même des - ( ce sont des noms de communes) cela posera t il un souci. ?
En tout cas merci à vous tous.
 
Salut omni

Question pour Macomaniac : si je comprends bien les noms dans le fichier texte doivent être l'un en dessous de l'autre ? Mon fichier original = un .xls. => une colonne avec 229 lignes.

Oui : un intitulé (simple ou composé) par ligne, liste alphabétique. Si tu peux convertir ton fichier .xls en un fichier TextEdit > ce serait l'idéal (par copier-coller ? - je ne connais rien à «Excel»).

Si tu voulais alors exploiter au maximum ta « sacro sainte paresse » (sic) > arrange-toi pour que le fichier TextEdit comportant ta liste alphabétique de noms superposés ligne à ligne soit strictement intitulé : Liste.txt. Cela fait > crée sur ton Bureau de session un dossier vide strictement intitulé BROL. Déplace alors le fichier Liste.txt à l'intérieur du dossier vide BROL.

Ces petits préliminaires accomplis > tu lances le «Terminal» (at: Applications > Utilitaires) > dans la fenêtre qui s'ouvre > tu fais un copier-coller direct d'une (seule) de ces 2 commandes (strictement équivalentes d'un point de vue opératoire) :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs -tI % mkdir %

cd Desktop/BROL ; xargs -tI % mkdir % < Liste.txt
et ↩︎ (presse la touche "Entrée" du clavier pour activer la commande que tu as choisie) => c'est fait : tu as tes 229 dossiers dans le dossier BROL > à côté du fichier Liste.txt qui a servi de paradigme.

[Ne fais pas attention à mes considérations sur l'esthétique visuelle des commandes : c'était un petit délire récréatif de week-end
361608_original.png
]
 
Salut omni



Oui : un intitulé (simple ou composé) par ligne, liste alphabétique. Si tu peux convertir ton fichier .xls en un fichier TextEdit > ce serait l'idéal (par copier-coller ? - je ne connais rien à «Excel»).

Si tu voulais alors exploiter au maximum ta « sacro sainte paresse » (sic) > arrange-toi pour que le fichier TextEdit comportant ta liste alphabétique de noms superposés ligne à ligne soit strictement intitulé : Liste.txt. Cela fait > crée sur ton Bureau de session un dossier vide strictement intitulé BROL. Déplace alors le fichier Liste.txt à l'intérieur du dossier vide BROL.

Ces petits préliminaires accomplis > tu lances le «Terminal» (at: Applications > Utilitaires) > dans la fenêtre qui s'ouvre > tu fais un copier-coller direct d'une (seule) de ces 2 commandes (strictement équivalentes d'un point de vue opératoire) :
Bloc de code:
cd Desktop/BROL ; cat Liste.txt | xargs -tI % mkdir %

cd Desktop/BROL ; xargs -tI % mkdir % < Liste.txt
et ↩︎ (presse la touche "Entrée" du clavier pour activer la commande que tu as choisie) => c'est fait : tu as tes 229 dossiers dans le dossier BROL > à côté du fichier Liste.txt qui a servi de paradigme.

[Ne fais pas attention à mes considérations sur l'esthétique visuelle des commandes : c'était un petit délire récréatif de week-end
361608_original.png
]
Merci Macomaniac pour cette explication très claire. Toutefois je me permets de transmettre la copie de ce que me renvoie le terminal selon que j'utilise l'une ou l'autre des instructions… le fichier Liste.txt a bien été créé puis insérer dans le dossier BROL créé à cet effet sur le Bureau…
Capture d’écran 2016-12-19 à 09.19.53.webp Capture d’écran 2016-12-19 à 09.22.49.webp