Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/09/2015, à 16:58

Ric_punk

Lister les dossiers et les compresser

Salut à tous, je recherche une commande me permettant de lister les dossiers contenus dans un autre dossier et de les compresser indépendamment l'un de l'autre

Par exemple, dans un dossier, j'ai 3 dossiers, dossier1, dossier2 et dossier3, j'aimerais donc créer un script qui liste ces 3 dossiers uniquement (pas leur contenu) et ensuite les compresser indépendamment l'un de l'autre pour avoir au final les 3 dossiers et 3 fichiers zip (dossier1.zip, etc)

Merci de votre aide ;-)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#2 Le 07/09/2015, à 17:55

nany

Re : Lister les dossiers et les compresser

Bonjour,

for d in *; do [[ -d "${d}" ]] && (echo "${d}"; zip -qr "${d}" "${d}"); done

En ligne

#3 Le 07/09/2015, à 18:01

Hizoka

Re : Lister les dossiers et les compresser

Salut,
un truc du genre :

while read Folder
do
  zip -r "${Folder}.zip" "${Folder}"
done < <(find "DOSSIER a scanner" -type d)

EDIT : grillé tongue

Dernière modification par Hizoka (Le 07/09/2015, à 18:37)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 09/09/2015, à 17:55

Ric_punk

Re : Lister les dossiers et les compresser

salut !
Ben ça c'est ce qu'on appelle du service rapide !! La classe !!

Merci à vous 2 !

Nany : Ton script fonctionne parfaitement sauf quand le dossier comporte un "." {point}, j'ai ce message d'erreur zip error: Zip file structure invalid, par contre le script prend tous les dossiers en charge, il ne s'arrête pas à l'erreur

Hizoka : En remplaçant simplement "DOSSIER a scanner" par * ça marche du tonnerre !

J'avais cherché un peu en commençant par un find * -type d -exec ..... mais mes compétences en la matière m'ont vite arrêté....

Nany j'ai essayé de modifié ton script pour ne pas avoir l'erreur avec un dossier comportant un point mais pour l'instant rien.... mais je cherche ;-)

Merci en tout cas à vous deux.... ça m'apprend encore pas mal de choses ce petit script (pas si simple pour moi) ;-)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#5 Le 09/09/2015, à 18:44

Ric_punk

Re : Lister les dossiers et les compresser

Si je lance la commande depuis le terminal ça marche comme il faut mais si je l'inclus dans un script que je lance par un clic droit dans le dossier j'ai ce message

Syntax error: redirection unexpected en ce qui concerne le script de Hizoka, mais je viens de trouver la solution, j'ai remplacé le #!/bin/sh du début de script par #!/usr/bin/env bash

Dernière modification par Ric_punk (Le 09/09/2015, à 18:47)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#6 Le 09/09/2015, à 19:08

nany

Re : Lister les dossiers et les compresser

Ric_punk a écrit :

Nany j'ai essayé de modifié ton script pour ne pas avoir l'erreur avec un dossier comportant un point mais pour l'instant rien.... mais je cherche ;-)

Il faut préciser l’extension .zip au premier argument de la commande zip :

for d in *; do [[ -d "${d}" ]] && (echo "${d}"; zip -qr "${d}.zip" "${d}"); done

En ligne

#7 Le 10/09/2015, à 07:46

Ric_punk

Re : Lister les dossiers et les compresser

Ah oui effectivement ça fonctionne impec comme ça smile ça a l'air tellement simple quand on voit la solution....

Merci beaucoup à vous 2

J'ai encore une petite question si c'est pas trop abusé

J'essaie de lancer cette commande depuis n'importe quel dossier avec le clic droit (scripts caja), le même principe que ceux pour Nautilus et quand je lance le script, il ne se passe rien, je lance donc le script depuis un terminal pour voir s'il y a une erreur

Voici les 2 choses que j'ai testées pour lancer le script dans une fenêtre de terminal avec le script de nany

mate-terminal --title='Compression dossier par dossier' -x for d in *; do [[ -d "${d}" ]] && (echo "${d}"; zip -qr "${d}.zip" "${d}"); done

ou

mate-terminal --title='Compression dossier par dossier' -c for d in *; do [[ -d "${d}" ]] && (echo "${d}"; zip -qr "${d}.zip" "${d}"); done

et j'ai toujours la même erreur bash: Erreur de syntaxe près du symbole inattendu « do »

et pour celui de Hizoka je tape un peu l'équivalent

mate-terminal --title='Compression dossier par dossier' -c while read dossier ;
do
 zip -r9 "${dossier}.zip" "${dossier}"
 done < <(find * -type d)

et là il ne se passe rien
ou

mate-terminal --title='Compression dossier par dossier' -x while read dossier ;
do
 zip -r9 "${dossier}.zip" "${dossier}"
 done < <(find * -type d)

et là j'ai un terminal qui s'ouvre avec cette erreur Il y a eu une erreur lors de la création du processus fils pour ce terminal / L'exécution du processus fils « while » a échoué (Aucun fichier ou dossier de ce type)

Par contre si je ne modifie pas les scripts pour les lancer dans un terminal ça marche impec ;-)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#8 Le 10/09/2015, à 09:32

Hizoka

Re : Lister les dossiers et les compresser

j’essaierais ça :

mate-terminal --title='Compression dossier par dossier' -x bash -c 'while read dossier; do zip -r9 "${dossier}.zip" "${dossier}"; done < <(find "${PWD}" -mindepth 1 -type d)'

évite d'utiliser * car ce n'est pas logique, pour moi, find te demande un dossier.
Utilise plutôt ${PWD} pour le dossier courant et ajoute -mindepth 1 pour ne pas qu'il affiche le dossier courant lui même.

Autre idée, tu crées un script avec la commande et tu la lance depuis ta commande mate, ça sera surement plus lisible et te permettrait de faire pas mal de tests (comme savoir où on est, les valeurs des variables...).

Dernière modification par Hizoka (Le 10/09/2015, à 09:33)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 10/09/2015, à 18:10

Ric_punk

Re : Lister les dossiers et les compresser

Merci !!! ça fonctionne parfaitement mais je laisse find * parce que si je mets ta portion de commande, dans l'archive il me met le chemin complet depuis le root du système...

Par contre j'ai un autre problème, si dans les archives, que ce soit le dossier ou les fichiers, si j'ai des lettres accentuées, il me supprime les accents et me mets des caractères du genre é et en faisant quelques recherches je crois que ce genre de problème n'a pas de solution quand on utilise zip dans le terminal

Dernière modification par Ric_punk (Le 10/09/2015, à 18:33)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#10 Le 10/09/2015, à 18:51

vv221

Re : Lister les dossiers et les compresser

Je viens vous embêter sur un point de langue : le terme "dossier" ("folder" en shakespearien) est une mauvaise habitude tirée des systèmes Windows.
On appelle ça un "répertoire" ("directory").

Voilà, je vous laisse tranquille maintenant wink

-----

Quoique, quitte à poster ici autant apporter un peu d’aide réelle au passage.

Le format '.zip' est-il un impératif ? Sinon le format '.tar' posera moins de problèmes, en particulier avec les caractères accentués. L’archive '.tar' peut par la suite être compressée via la méthode de ton choix ('.tar.gz', '.tar.xz', etc.).

Dernière modification par vv221 (Le 10/09/2015, à 18:54)


Jouer sur Ubuntu ? Facile !

Hors ligne

#11 Le 10/09/2015, à 20:06

Hizoka

Re : Lister les dossiers et les compresser

perso je n'ai pas de soucis avec les accents.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 11/09/2015, à 08:18

Ric_punk

Re : Lister les dossiers et les compresser

vv221, pas faux, c'est pour ça que j'ai renommé Folder en dossier ;-)

En ligne de commande tu n'as pas de problème avec les accents Hizoka ??


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#13 Le 11/09/2015, à 08:39

Hizoka

Re : Lister les dossiers et les compresser

┌─[hizoka@~/Download/a]
└─> zip caca.zip "&é\"'(-è_çà" 
  adding: &é"'(-è_çà (stored 0%)

┌─[hizoka@~/Download/a]
└─> unzip -l caca.zip 
Archive:  caca.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        2  2015-09-11 08:38   &é"'(-è_çà
---------                     -------
        2                     1 file

Dernière modification par Hizoka (Le 11/09/2015, à 08:39)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#14 Le 11/09/2015, à 09:26

Ric_punk

Re : Lister les dossiers et les compresser

Pas tout compris là....

Quand je crée le fichier zip, le nom accentué ne pose pas de problème, c'est le contenu de l'archive qui pose problème....


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#15 Le 11/09/2015, à 09:40

Ric_punk

Re : Lister les dossiers et les compresser

Par contre si je compresse ce même dossier en gui, pas de soucis d'accents ni pour le nom de l'archive ni dans le contenu de l'archive....


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#16 Le 11/09/2015, à 11:07

Ric_punk

Re : Lister les dossiers et les compresser

J'ai testé en utilisant  7zip, ce qui, dans le script me donne

while read dossier; do 7z a -tzip -mx=6 "${dossier}.zip" "${dossier}"; done < <(find * -type d)

ou

for d in *; do [[ -d "${d}" ]] && (echo "${d}"; 7z a -tzip -mx=6 "${d}.zip" "${d}"); done

mais j'aurais préféré utiliser le programme zip


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#17 Le 11/09/2015, à 11:38

nany

Re : Lister les dossiers et les compresser

Étrange ce souci avec les accents et autres caractères unicode. Je n’ai pas ça chez moi non plus.
Essaye avec l’option -UN=UTF8 :

while read dossier; do zip -r -UN=UTF8 "${dossier}.zip" "${dossier}"; done < <(find * -type d)
for d in *; do [[ -d "${d}" ]] && (echo "${d}"; zip -rq -UN=UTF8 "${d}.zip" "${d}"); done

En ligne

#18 Le 11/09/2015, à 13:26

Ric_punk

Re : Lister les dossiers et les compresser

Oui étrange surtout que si je compresse le dossier en faisant un clic droit, compresser et que je choisis le format zip je n'ai aucun problème
Avec le script que j'ai indiqué en dernier avec 7zip pas de soucis non plus...

Ce que tu m'indique -UN ne marche pas non plus, quelle que soit l'option que je mets (utf8 ou ignore ou autre)

De plus, dans la fenêtre terminal qui s'ouvre quand je compresse, le nom des fichiers compressés sont bons, je vois bien les accents et autres caractères spéciaux....

Dernière modification par Ric_punk (Le 11/09/2015, à 13:31)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne