FIND ~~~~ -exec tar.... [ PROBLEMES ] [ SCRIPT ] - Multimédia - Linux et OS Alternatifs
Marsh Posté le 21-10-2002 à 16:33:54
kuroineko a écrit a écrit : j'ai un script qui fait:
|
je viens de passer mon aprem a ca au boulot....pas trouve de solutions...
pour etre + clair ce dont j'ai besoin c'est de savoir comment faire pour garder le {} du find pour m'en servir pour generer le nom de fichier.
Marsh Posté le 21-10-2002 à 17:18:12
T'as essayé un truc dans ce genre là :
Code :
|
à tout hasard ?
Marsh Posté le 21-10-2002 à 17:21:58
Essaie de mettre un nom de fichier générique (var_file) suivi de
la date, voir date et heure si tu lances plusieurs fois par jours
pour certains serveurs ce script (var_file_200310211724 par
exemple).
Je sais comment ça peut être possible en utilisant awk, sinon ça
doit bien être possible tout simplement avec un script shell.
Marsh Posté le 21-10-2002 à 19:05:08
Qyridian a écrit a écrit : Essaie de mettre un nom de fichier générique (var_file) suivi de la date, voir date et heure si tu lances plusieurs fois par jours pour certains serveurs ce script (var_file_200310211724 par exemple). Je sais comment ça peut être possible en utilisant awk, sinon ça doit bien être possible tout simplement avec un script shell. |
le nomde fichier est le resultat du find obligatoirement...donc pas possible de passer dans une variable.
Marsh Posté le 21-10-2002 à 19:18:37
kuroineko a écrit a écrit : pour etre + clair ce dont j'ai besoin c'est de savoir comment faire pour garder le {} du find pour m'en servir pour generer le nom de fichier. |
N'y a-t-il pas moyen de faire un export blabla={}.tar et ensuite
un mv {}.tar $blabla.tar ? Ou alors, si le {} marche sans le .tar
et qu'il ne marche pas avec .tar, je pense qu'il faut qq chose
pour délimiter le {}, en tcl c justement {} autour de l'expression,
peut-être est-ce [] en shell script...
Marsh Posté le 21-10-2002 à 19:21:14
|
Marsh Posté le 21-10-2002 à 19:23:30
Qyridian a écrit a écrit : N'y a-t-il pas moyen de faire un export blabla={}.tar et ensuite un mv {}.tar $blabla.tar ? Ou alors, si le {} marche sans le .tar et qu'il ne marche pas avec .tar, je pense qu'il faut qq chose pour délimiter le {}, en tcl c justement {} autour de l'expression, peut-être est-ce [] en shell script... |
en script normal c'est simple mais la je peux pas scripter je suis dans un RSH !!!
c'est dingue je trouve pas moyen de le faire...
tar a besoin de faire interpreter le {} comme tel et pas comme caracteres { & } ce qui provoque le fichier {}.tar
Marsh Posté le 22-10-2002 à 08:03:40
minusplus a écrit a écrit :
|
non si tu integre des "" dans une commande find il va retourner une erreur style bad statement...
Marsh Posté le 22-10-2002 à 08:52:30
je me suis dit que je pouvait tenter gzip....
|
mais a cause du > find ne reconnait plus le caractere \;
Marsh Posté le 22-10-2002 à 12:27:15
Mes collegues et moi continuons a chercher mais on trouve pas...
Marsh Posté le 22-10-2002 à 12:30:34
c'est dans ces moments là que je suis en colère contre linux et ça Ô combien fameuse ligne de commande qui permet de tout faire ... en attendant, dès que c'est une peu "spécial", y-a plus personne pour répondre
Marsh Posté le 22-10-2002 à 13:17:48
Tux Le Penguin a écrit a écrit : c'est dans ces moments là que je suis en colère contre linux et ça Ô combien fameuse ligne de commande qui permet de tout faire ... en attendant, dès que c'est une peu "spécial", y-a plus personne pour répondre |
en fait c'est tout a fait normal que ca puisse pas marcher puisque
tar option PARAMETTRES liste de fichier
et {} retour du find est une liste et non un fichier (liste de longueur 1 si il y a qu'un fichier). Gzip pose aussi probleme
la solution est en fait simple
utiliser le compresseur standard unix
compress qui nome de lui meme le fichier en .Z
rsh $SERVEUR "find /var/spool/mail -size +8196k -exec compress {} \;"
|
Marsh Posté le 22-10-2002 à 13:29:57
kuroineko a écrit a écrit : non si tu integre des "" dans une commande find il va retourner une erreur style bad statement... |
mais kess tu raconte ?
tes { } ne sont pas escapées c donc le shell qui les interprète avant find, c'est tout ! mets les dans des " ou des ' ou escape les avec \ et ça fonctionne !
Marsh Posté le 22-10-2002 à 13:35:21
kuroineko a écrit a écrit : Mes collegues et moi continuons a chercher mais on trouve pas... |
C'est marrant, mais en partant de ce que j'ai écrit plus haut, ça a l'air de marcher (à 2 ou 3 corrections près, mais c'était l'idée). Tiens, un truc qui marche comme tu as expliqué (à savoir transforme le fichier "trucmuche.bid" en "trucmuche.bid.tar" avec le find :
Code :
|
Pas besoin du pwd, j'y avais pas pensé. Le tar râle un peu, mais man tar devrait arranger les choses, parce qu'il met des répertoires au début. Voir du côté de l'option -P peut-être.
Marsh Posté le 22-10-2002 à 13:39:56
Tux Le Penguin a écrit a écrit : c'est dans ces moments là que je suis en colère contre linux et ça Ô combien fameuse ligne de commande qui permet de tout faire ... en attendant, dès que c'est une peu "spécial", y-a plus personne pour répondre |
Et pourtant, la solution que j'ai donnée hier vers 17H fonctionnait presque. Tout simplement. Qu'est-ce qu'il te faut de plus que la réponse, toi ? (Admettons, ça marchait pas, il y avait juste un `pwd {}` en trop, mais à partir de là, c'était pas compliqué de trouver la solution, si ?)
Marsh Posté le 22-10-2002 à 13:42:02
Tux Le Penguin a écrit a écrit : c'est dans ces moments là que je suis en colère contre linux et ça Ô combien fameuse ligne de commande qui permet de tout faire ... en attendant, dès que c'est une peu "spécial", y-a plus personne pour répondre |
Alors là vous me faites crever de rire ! vous gueulez sur la ligne de commande sans avoir eu la plus petite délicatesse de lire la man bash !
Vous connaissez le principe de "caractères spéciaux" ? et celui d'"échappement" de ces caractères spéciaux ?
Marsh Posté le 22-10-2002 à 13:46:44
minusplus a écrit a écrit : Alors là vous me faites crever de rire ! vous gueulez sur la ligne de commande sans avoir eu la plus petite délicatesse de lire la man bash ! Vous connaissez le principe de "caractères spéciaux" ? et celui d'"échappement" de ces caractères spéciaux ? |
Ahlalala, ces jeunes ... Trop impulsifs, mais tellement plein de bonne volonté. 'faut pas que tu leur en veuilles, tu vas leur faire peur.
Note, j'ai jamais lu le man bash en entier, moi non plus.
Marsh Posté le 22-10-2002 à 15:54:36
Jak a écrit a écrit : Et pourtant, la solution que j'ai donnée hier vers 17H fonctionnait presque. Tout simplement. Qu'est-ce qu'il te faut de plus que la réponse, toi ? (Admettons, ça marchait pas, il y avait juste un `pwd {}` en trop, mais à partir de là, c'était pas compliqué de trouver la solution, si ?) |
non ca marche pas enfin pas assez stable un coup ca marchait un coup ca marchait pas...le test avait selectionne certain fichiers mais pas tous parmis les fichiers recquis.
Marsh Posté le 22-10-2002 à 15:57:33
minusplus a écrit a écrit : Alors là vous me faites crever de rire ! vous gueulez sur la ligne de commande sans avoir eu la plus petite délicatesse de lire la man bash ! Vous connaissez le principe de "caractères spéciaux" ? et celui d'"échappement" de ces caractères spéciaux ? |
oui on les connait et oui on a tous (enfin dans mon equipe de boulot relu le bash et le ksh pour voir comment ca allait pouvoir passer) et toute notre equipe de'IT n'a pas trouve de solution 100% parfaite pour ce cas precis et donc pour pas perdre plus de temps on a dit stop on laisse tomber tar et on fait ca avec compress comme ca plus de probleme de selection du nom ou creer nomidentique+extention_du_compress
avantages syntaxique evident
compress -f truc
donne
truc.Z et non pas turc + truc.Z comme deuxieme fichier
ce qui facilitera les lectures & maintenances futures du script
Marsh Posté le 22-10-2002 à 16:33:02
kuroineko a écrit a écrit : non ca marche pas enfin pas assez stable un coup ca marchait un coup ca marchait pas...le test avait selectionne certain fichiers mais pas tous parmis les fichiers recquis. |
Je vois pas trop le rapport entre le test et la commande, là ...
Marsh Posté le 22-10-2002 à 18:45:59
Jak a écrit a écrit : Je vois pas trop le rapport entre le test et la commande, là ... |
on a teste ta commande sur un groupe de fichier bidons
et selon leurs structures (dans le nom de fichier) ta commande fonctionne ou ne fonctionne pas.
en renomant les fichiers qui merdaient ca passait.
conclusion : le resultat de ta commande est directement depandant de la forme du nom du fichier.
un fichier contenant plusieurs "." & " " ne passent pas a coup sur le retour du find est > 1
donc errone en bash ca march mieux qu'en ksh mais tjrs pas a 100%
precision :
test en condition reel :
donc sous RSH $SERVEUR "......"
sur les 2 shells du reseau
bash
ksh
le probleme est surement lie a l'interpretation des '' et de {} a l'interieur de ""
Marsh Posté le 21-10-2002 à 12:16:28
j'ai un script qui fait:
.....
for SERVEUR in /truc/machin/liste_serveur
do
rsh $SERVEUR find /var/.../machin -size +8196k -exec mv {} /tmp \;
.....
done
ca ca marche
mais le but etant de compresser le fichier plutot que de l'envoyer dans /tmp pour libere de l'espace sur le disque /var
je pensais faire
.....
for SERVEUR in /truc/machin/liste_serveur
do
....
rsh $SERVEUR find /var/.../machin -size +8196k -exec tar cvf {}.tar {} \;
.....
done
dans l'idee mais j'obtient un fichier nome {}.tar d'ou probleme
si vous avez une idee...
---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault fpussault@caramail.com