[MacOs] Zipper plein de dossiers automatiquement

Je suis confronté à un problème à priori tout simple mais en fait pas tant que ça. Je suis sous MacOS 10.5 et j’ai des centaines de dossiers à « convertir » en fichier zip.

En gros « un dossier = un fichier zip avec le même nom ». Mais la seule solution proposée par défaut par MacOS est « clic droit → compresser le dossier », et manuellement j’en ai donc pour très très longtemps…

J’ai rapidement cherché un utilitaire de zip qui pourrait me faire ça mais j’ai pas trouvé. J’ai également essayé d’automatiser le processus avec Automator mais je ne l’ai jamais utilisé et je ne pige pas bien comment ça fonctionne.

Merci par avance pour votre aide :slight_smile:

essaye ce genre de script SH:

[code]#!/bin/bash
debug=echo

for i in ls -1; do
$debug ditto -ck --sequesterRsrc --keepParent $i $i.zip
done[/code]

j’ai trouvé la commande de compression via le net, j’ai pas mon mac ici donc pas moyen de tester. si tout va bien, il doit t’afficher ditto -ck --sequesterRsrc --keepParent .zip pour chaque dossier de ton repertoire

si ca te semble bon, tu remplace debug=echo par debug=

je te deconseille fortement de lancer ton .sh via un double clic (meme pas sur que ca marche par defaut): met le dans ton dossier, lance un terminal et navigue jusque la

si ditto marche pas, regarde pour la commande zip (zip --help, ou man zip si le man est installé) pour une commande equivalente, $i representant le nom du dossier, tu devrais t en sortir (oublie pas de laisser debug=echo pendant tes test)

et si tu peux: backup tes dossiers avant

(et si tu n’as jamais utilisé de script shell: tu fais un fichier texte dans ton dossier, tu l’ouvre avec textedit, tu copie/colle le code au dessus, tu sauvegarde en .sh, terminal, tu va jusqu au dossier en question, chmod 755 .sh, puis ./.sh )

Merci, j’ai quelques notions sous Unix donc je devrai pouvoir me débrouiller avec ta solution. Par contre comme toi j’ai pas mon iMac sous la main donc je testerai ça ce soir.

En attendant si quelqu’un d’autre a une solution plus « user-friendly » je dis pas non :slight_smile:

Je vois pas ce qu’il y a de plus user friendly qu’un shell unix :crying:

Ouch …

s’enfuit rapidement en claquant la porte

[quote=“Kzi, post:2, topic: 49922”]essaye ce genre de script SH:

[code]#!/bin/bash
debug=echo

for i in ls -1; do
$debug ditto -ck --sequesterRsrc --keepParent $i $i.zip
done[/code][/quote]

Si tes noms de dossiers comportent des espaces tu vas vouloir mettre tes $i et $i.zip entre guillemets.

[code]#!/bin/bash
debug=echo

for i in ls -1; do
$debug ditto -ck --sequesterRsrc --keepParent “$i” "$i.zip"
done[/code]

Rahlala :

man ls

[quote]–quoting-style=WORD
use quoting style WORD for entry names: literal, locale, shell,
shell-always, c, escape[/quote]

effectivement, le code en haut ne tenait pas compte des noms avec espaces.

ceci dit Fser, tu aurais pu le faire en moins hautain, moins ‹ vous devriez connaitre les 10+ pages de man ls quand meme ›

Rahlala :confused:

et un petit coup d’automator ça n’irait pas?

  • demander les elements du finder/selection d’un dossier
  • créer une archive

Bon ça marche presque avec la commande zip, mais j’ai un problème avec les espaces.

Voici mon script :

[code]#!/bin/bash
debug=echo

for i in ls -1; do
$debug zip -b "$i"
done[/code]

Et un bout de ce que ça donne :

[quote]zip -b Chapter
zip -b 23/
zip -b Chapter
zip -b 24/
zip -b Chapter
zip -b 25/
zip -b Chapter
zip -b 26/
zip -b Chapter
zip -b 27/[/quote]

Comme vous le voyez les dossiers avec un espace, du genre “Chapter 22” ne sont pas bien pris en compte car ils sont interprétés comme un dossier “Chapter” et un dossier “22”, pourtant j’ai bien mis les guillemets. Que faire ? (et l’option proposée par fser ne fonctionne pas, ls ne connait pas cette option sous MacOs)

Essaye ceci :

[code]#!/bin/bash

IFS=$’\n\t’

debug=echo

for i in ls -1; do
$debug zip -b $i
done

unset IFS[/code]

roh, les Internal Field Separator, j’ai pas utilisé ca depuis des années :slight_smile:

sinon tu dois pouvoir t en sortir avec

for i in ls -1 | sed 's/ /\\ /g'; do

(pas de shell pour tester :x)

Désolé pour le ton hautain, c’était juste pour faire le vieux con, étant sans doute le plus jeune de ce thread :slight_smile:
La solution de LodeRunner ne fonctionne pas?

Non ça fonctionne pas pour 2 raisons :

  • le ditto n’est pas bien pris en compte, du coup je me suis rabattu sur la fonction zip
  • les espaces ne sont pas pris en compte malgré les guillemets

J’essaierai les autre solutions proposées ce soir

Ca se fait vraiment en moins de 2 minutes avec Automator, je te suggère quand même d’essayer ça en priorité :slight_smile:

En fait j’ai du mal à comprendre la « philosophie » d’automator, j’ai fait quelques essais mais je sais pas trop pourquoi je m’en sors pas. Si quelqu’un pouvait m’expliquer rapidement avec cet exemple concret ce serait parfait :slight_smile:

[quote=“fser, post:7, topic: 49922”]Rahlala :

man ls

C’est une option GNU only, donc pas dans le ls de OS X.

YOU FAIL.

[quote=« kineox, post:17, topic: 49922 »]C’est une option GNU only, donc pas dans le ls de OS X.

YOU FAIL.[/quote]

dont OS X �?A PUE :slight_smile:

Rien à voir avec OS X, le ls d’OS X est celui de FreeBSD tout simplement.

Donc, par syllogisme ou transitivité, Freebsd pue, Macos est un Freebsd, donc MacOsX pue ?