Aller au contenu

Messages recommandés

Bonjour,

 

Je souhaiterai compresser un fichier via le terminal en conservant ses ressources...

Quelqu'un aurai une astuce ?

j'utilise la commande gzip, et sauf erreur de ma part, rien à ce sujet dans la doc... unsure.gif

je suis prêt à utiliser une autre commande bien sûr !

 

Merci d'avance !

Lien à poster
Partager sur d’autres sites

Peut-être en faisant un "tar.gz" au lieu d'un "gz" tout seul, la création du tar permettant peut-être (pure supposition, j'ai rien cherche pour vérifier) de grouper le fichier et son resource fork ?

Lien à poster
Partager sur d’autres sites

bon, oui, ça marche merci ali !

 

me reste plus qu'à l'implémenter dans mon script shell...

 

si j'ai un fichier "toto" il faut faire

>tar -cf toto.tar toto

on obtient alors mon fichier "toto.tar", puis je fait appel à la commande gzip :

>gzip toto.tar

afin d'obtenir un fichier compressé "toto.tar.gz" (avec mes ressources).

 

J'ai essayé de faire :

>tar -cf toto.tar toto | gzip toto.tar

mais le terminal me jette en me disant que le fichier n'existe pas... et en plus, le fichier que je doit compresser fait dans les 600Mo (là, je fait des tests sur un vieux fichier appleworks :P )

 

dans mon script, le nom du fichier est une variable définie plus haut (ds mon script, genre $fichier).

 

Si quelqu'un peut me dire pourquoi le pipe foire (je suis nul en terminal, ali le sait ;) )

 

Merci wub.gif

Modifié par Amarok II
Lien à poster
Partager sur d’autres sites

Salut Amarok et Ali :)

 

Voilà ce que je viens de faire en AS et qui fonctionne très bien chez moi :

 

-- Choix du fichier et retour du chemin d'acces Unix

set theOrig to POSIX path of (choose file without invisibles)

 

-- Ajout des appostrophes (quoted) et de l'extension du fichier ".tar"

set theDoc to quoted form of theOrig

set theTar to quoted form of (theOrig & ".tar")

 

-- Execution du script Shell, avec positionnement du dossier de travail

-- par défaut "cd", sur celui du document original theDoc

do shell script "cd " & theDoc & " | tar -cf " & theTar & " " & theDoc & " | gzip " & theTar

 

En pur code Shell cela devrait ressembler à quelque chose comme :

 

cd '/user/folder/doc.txt' | tar -cf '/user/folder/doc.txt.tar'  '/user/folder/doc.txt' | gzip  '/user/folder/doc.txt.tar'

 

La première commande "cd" permet d'indiquer au Shell que le dossier où se trouve le fichier à traiter doit être utilisé comme dossier de travail par défaut, ensuite, on enchaîne la conversion ".tar" puis la compression ".zip", toujours en indiquant le chemin d'accès complet de chaque fichier (à la sauce Unix bien-sûr).

 

Je n'ai pas testé avec le terminal (moins je m'en sers et mieux je me porte :huh::P ) mais avec AS ça marche très bien :)

 

;)

Modifié par Fredo d:o)
Lien à poster
Partager sur d’autres sites

En fait si tu fais un "pipe", ça veut dire "prend la sortie de la commande d'avant, et envoi-la comme entrée de la commande d'après".

Donc là ta commande d'avant c'est ta commande "tar". Si tu ne lui précises rien et fait pas de pipe, par défaut ce qu'elle génère en sortie (les octets représentant le TAR de tes fichiers) elle l'écrit dans un fichier à l'extension ".tar". C'est pour ça que dans ton premier cas tu as un fichier "toto.tar" de généré

Mais si tu fais un "pipe" avec autre chose, au lieu d'écrire le résultat dans le fichier "toto.tar", ça va passer ce résultat à la commande suivante.

 

Donc ton "gzip" doit compresser l'entrée standard (dit "stdin"), et tu n'as pas à faire mention de "toto.tar" qui était dans ton premier essai un fichier intermédiaire, mais justement l'intérêt du pipe c'est de ne pas avoir besoin d'intermédiaire, donc il n'est plus d'actualité dans la solution avec le pipe.

 

 

Mais de toute façon, t'embête pas : la combinaison des opération "tar" + "gz" est tellement répandue qu'il y a une option pour ça dans tar !

Regarde dans la page man de tar, à la fin y'a carrément des exemples. Le flag "-z" permet en particulier de compresser (via gzip) le résultat du TAR. Donc tar -czf resultat.tar.gz fichier1 fichier2 fichier3 est ta solution.

 

 

En fait pour info, l'objectif de "tar" c'est de faire une "Tape ARchive" de plusieurs fichiers, donc son but c'est d'aggréger plusieurs fichier en un et pas de compresser, c'est gzip qui fait la compression pour gagner de la place (et justement, gzip ne sait faire que de la compression de fichier, pas de dossier). D'où l'assemblage tar+gz.

Lien à poster
Partager sur d’autres sites

non, mais oh, je le savais qu'elle était simple la réponse ! :D

 

merci ali, merci fredo :)

je vous aime tiens! wub.gif

 

(histoire d'être encore plus ambiguë vis à vis de go-gaule :P )

 

 

il ne me reste plus que deux choses pour rendre ce script génial :

1 - l'intégrer dans la launchd

2 - envoyer un mail automatiquement en cas de succès (ou d'échec).

 

pour info, mon shell prend un fichier (qui porte le même nom mais change tous les jours, un fichier .datas d'une base 4D ), le compacte (en .tgz donc ;)), et l'envoi par ftp (avec curl).

 

je peux le mettre à dispo, il provient largmeent d'ici de toute manière, et d'un peu de googlerisation...

Modifié par Amarok II
Lien à poster
Partager sur d’autres sites

Voilà le script au complet si ça peut aider :

 

#!/bin/bash
# backupftp.sh
# Script permettant l'envoi d'un fichier via ftp deux fois par semaine.
# Copyright Nicolas Péré, 2008

echo "
Le nom de mon script est : $0"

# Variables :
serveur=ftp.votre_serveur.fr
login=votre_login
password=votre_mot_de_passe
dossier=dossier_sur_le_serveur_ftp
chemin=/~/Desktop/ (chemin vers le fichier à sauvegarder)
fichier=test.txt (nom du fichier à sauvegarder)

echo "Fichier sélectionné pour ce script : " $chemin$fichier

# Compacte un fichier :
echo "
Compacte le fichier..."
tar -czf $chemin$fichier.tar.gz $chemin$fichier
#gzip -c $chemin$fichier > $chemin$fichier.gz (supprime les ressources)


# Connexion ftp :
echo "
Ouverture de la connexion ftp..."
ftp "ftp://"$login":"$password"@"$serveur"/"$dossier"/"

# Envoi du fichier sur le serveur ftp :
put "$chemin$fichier.gz" "$fichier.gz"


# On ferme la connexion ftp :
bye
echo "
Connexion ftp fermée."

# Envoi d'un mail de confirmation :
# voir commande mail ou mailx ou sendmail

#tache cron à ajouter :
# Tous les Lundis à 3h15 du matin :
# 15  3  *  * 1 /~/bin/backupftp.command

 

 

si on peut m'aider à le terminer...

Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...