0 votes

Comment compresser plusieurs dossiers en plusieurs fichiers zip ?

La structure de mes dossiers est la suivante :

ANNÉE - MOIS - JOUR - SOUS-DOSSIERS

Je veux compresser chaque sous-dossier des répertoires [DAY]. La solution de ici qui est :

for i in */; do zip -r "${i%/}.zip" "$i"; done

fonctionne bien tant que je le fais à partir d'un dossier [DAY]. Mais si je le change en :

for i in */*/; do zip -r "${i%/}.zip" "$i"; done

et exécuté à partir d'un dossier [MONTH], il fonctionne toujours, mais le problème est que le .zip contient maintenant un dossier parent supplémentaire pour chaque '/*' supplémentaire dans la commande lorsque je le décompresse.

Comment puis-je exécuter la commande à partir d'un dossier [YEAR] avec '/* /* /*' tout en m'assurant que le .zip ne contient que le sous-dossier de plus bas niveau lorsque je le décompose ?

0 votes

En quoi cela concerne-t-il Apple ? C'est probablement un meilleur sujet sur Unix/Linux .

0 votes

@Allan Le scripting Shell est le sujet ici :-)

1 votes

C'est vrai, mais il y a des différences subtiles dans les commandes si c'est une boîte Linux. Il suffit de regarder grep . C'est pourquoi je n'ai pas signalé la fermeture mais demandé des éclaircissements.

1voto

nohillside Points 82672

Dans votre cas, vous pouvez combiner deux boucles pour accomplir ceci

cd YEAR
for month in */; do
    (cd "$month";  for i in */; do zip -r "${i%/}.zip" "$i"; done)
done

PS : Si les dossiers MONTH peuvent être vides, vous devez le vérifier dans la boucle interne.

0 votes

Mais... +1 quand même... parce que c'est une sacrée bonne réponse.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X