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 23/07/2012, à 11:02

ced-mamou

[Résolu] Restauration de fichiers PDF suite à compression hasardeuse

Bonjour à tous,

Voici mon problème : j'ai fait un script pour compresser les fichiers PDF de mon réseau (je fais partie d'un service info, environnement full windows casi à part moi!!). J'ai rassemblé des idées ici et là pour faire un truc simple : 1. recherche, 2. sauvegarde et 3. compression.
A noter que je débute en bash.
Sur le papier ça allait bien et les premiers essais aussi. Le problème c'est que lorsque j'ai lancé la bête un week-end en mode "industriel" (environ 60 000 .pdf), il y a certains fichiers (entre 2000 et 2500) qui ont été vidés, taille après compression 2192 octets.
Donc là je suis content d'avoir un dossier de sauvegarde (avec en vrac tous mes .pdf à la racine à l'intérieur) mais je sèche un peu pour les remettre en place.
J'ai réussi à les retrouver via [find . -name "*.pdf" -a -size -4k => là j'ai déjà mis un certain temps parce-que 4k ça ne correspond à rien mais par exemple -3k il ne sort rien] mais je ne sais pas trop comment faire pour dire à mon script d'aller piocher celui qui a le même nom dans le dossier de sauvegarde pour le remettre en place.

Une idée ?

Dernière modification par ced-mamou (Le 24/07/2012, à 16:34)

Hors ligne

#2 Le 23/07/2012, à 12:02

ludovic889

Re : [Résolu] Restauration de fichiers PDF suite à compression hasardeuse

salut

sans être un grand spécialiste, je dirais un truc comme ça

find . -name "*.pdf" -a -size -4k -print0 | xargs -0 -I file cp  /votre/serveur/basename file file

Attention ne me faites pas confiance et attendez d'autres avis plus avisés
mais je pense que c'est un bon début

Dernière modification par ludovic889 (Le 23/07/2012, à 12:03)


Ce n'est pas grave de ne pas avoir l'heure si on a le temps.

Hors ligne

#3 Le 23/07/2012, à 12:24

ludovic889

Re : [Résolu] Restauration de fichiers PDF suite à compression hasardeuse

re-bonjour

en tâtonnant, j'ai fait

find . -name "*.sh" -a -size -4k -print0 | xargs -0 -I file bash monscript.sh file

et monscript.sh contient

#!/bin/bash

file=$1
bfile=$( basename "$file" )

echo je déplace /votre/serveur/$bfile vers $file

ça commence à être intéressant ; mais il est urgent d'attendre !!!


Ce n'est pas grave de ne pas avoir l'heure si on a le temps.

Hors ligne

#4 Le 23/07/2012, à 12:42

ced-mamou

Re : [Résolu] Restauration de fichiers PDF suite à compression hasardeuse

Bonjour,

Merci c'est très intéressant. En fait c'est le basename qui me manquait, je ne voyais pas comment récupérer le nom de mon fichier.

Super, je vais creuser ça moi aussi.

Hors ligne

#5 Le 24/07/2012, à 07:57

nesthib

Re : [Résolu] Restauration de fichiers PDF suite à compression hasardeuse

juste une petite remarque, en bash basename est un peu inutile :

file="/un/chemin/vers/un/fichier"
echo ${file##*/}

pour plus de détails voir le man de bash à la section parameter expansion

@ced-mamou : sinon un conseil pour ne pas faire de bêtises, lorsque tu écris ton script ne déclenche aucune action, à la place mets quelque chose du genre :

 echo cp "${fichier##*/}" "${fichier}"

Tu pourras enlever le « echo » lorsque tu seras certain que le script fait ce que tu veux.

De plus, et comme tu le remarques dans mon exemple, utilise des guillemets doubles autour de tes noms de variables, cela préservera les éventuels espaces dans les noms de fichier et évitera d'écraser des fichiers


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#6 Le 24/07/2012, à 16:32

ced-mamou

Re : [Résolu] Restauration de fichiers PDF suite à compression hasardeuse

nesthib a écrit :

juste une petite remarque, en bash basename est un peu inutile :

file="/un/chemin/vers/un/fichier"
echo ${file##*/}

Ah oui elle est sympa aussi celle-là!

nesthib a écrit :

pour plus de détails voir le man de bash à la section parameter expansion

J'ai essayé mais on se sent peu de chose quand on a beau lire et relire mais qu'on ne comprend pas wink
Et admiratif aussi de voir qu'il y en a qui maitrisent ça!

nesthib a écrit :

@ced-mamou : sinon un conseil pour ne pas faire de bêtises, lorsque tu écris ton script ne déclenche aucune action, à la place mets quelque chose du genre :

 echo cp "${fichier##*/}" "${fichier}"

Tu pourras enlever le « echo » lorsque tu seras certain que le script fait ce que tu veux.

De plus, et comme tu le remarques dans mon exemple, utilise des guillemets doubles autour de tes noms de variables, cela préservera les éventuels espaces dans les noms de fichier et évitera d'écraser des fichiers

OK merci pour ces précieux conseils très instructifs (également merci à ludovic889). Je bascule le post en résolu je crois que j'ai désormais tous les éléments pour réparer ma boulette.

Dernière modification par ced-mamou (Le 24/07/2012, à 16:36)

Hors ligne