#1 Le 07/09/2015, à 15: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, à 16: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, à 17: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é
Dernière modification par Hizoka (Le 07/09/2015, à 17:37)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 09/09/2015, à 16: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, à 17: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, à 17:47)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#6 Le 09/09/2015, à 18:08
- nany
Re : Lister les dossiers et les compresser
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, à 06:46
- Ric_punk
Re : Lister les dossiers et les compresser
Ah oui effectivement ça fonctionne impec comme ça ç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, à 08: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, à 08:33)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 10/09/2015, à 17: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, à 17:33)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#10 Le 10/09/2015, à 17: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
-----
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, à 17:54)
Jouer sur Ubuntu ? Facile !
Hors ligne
#11 Le 10/09/2015, à 19: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, à 07: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, à 07: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, à 07:39)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#14 Le 11/09/2015, à 08: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, à 08: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, à 10: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, à 10: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, à 12: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, à 12:31)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne