2016-02-15 1 views
0

Je suis presque nouveau sur un script shell mais je ne connais pas certaines commandes. J'essaie d'écrire ci-dessous script shell, s'il vous plaît donner une direction. 1. Lisez les fichiers * .gz du répertoire spécifique 2. Extrayez-le dans un autre dossier 3. Déplacez un fichier original dans un autre dossier. Je peux le faire trois scripts shell séparés mais je le veux inclure un script shell. Ensuite, ce script sera cronjob et fonctionnera toutes les 5 minutes. J'essayais de commencer comme ci-dessous mais de toute façon je suis un peu confus comment obtenir la liste des fichiers. Je peux le faire ici un autre script mais que vous voulez inclure dans un script «A propos de: extraire les fichiers * .gz et déplacer un fichier original vers un autre dossier


#!/bin/bash 

while IFS= read file; do 
    gzip -c "$file" > "zipdir/$(basename "$file").gz" 
done < filelist 
----------------------------------------- 

PS:. Les fichiers sont créés dans toutes les 5 minutes

Répondre

1

Il existe plusieurs façons de mettre en œuvre ce que vous cherchez. . pour (je considérerais notify) de toute façon ... c'est une implémentation très simple:

$ source=~/tmp/source # directory where .gz files will be created 
$ target=~/tmp/target # target directory for uncompressed files 
$ archive=~/tmp/archive # archive dir for .gz files 
$ shopt -s nullglob  # avoid retiring unexpanded paths 
$ for gz in ${source}/*.gz ; do gzip -dc "$gz" > ${target}/$(basename "$gz" .gz) ; mv "$gz" ${archive}/ ; done 
$ shopt -u nullglob  # reset nullglob 

Si vous connaissez pour le répertoire « source » que contiendra toujours les fichiers .gz vous pouvez éviter sho pt.

Une autre solution (ne nécessitant pas shopt) est la suivante:

find ${source} -name '*.gz' -print0 | while read -d '' -r gz; do 
    gzip -dc "$gz" > ${target}/$(basename "$gz" .gz) 
    mv "$gz" ${archive}/ 
done 

La première ligne semble un peu compliqué, car il gère les noms de fichiers sources vous contenant des espaces ...

+0

Merci beaucoup, est est pas gzip, il devrait être gunzip juste pour l'extrait? et ne comprennent tout simplement pas shopt -s nullglob et shopt -u nullglob. (évitez de quitter les chemins non expansés) – user347918

+0

supposons que votre répertoire "source" (celui contenant les fichiers .gz d'origine est vide). Dans ce cas, la boucle for retournera la source $/g. Non gerée (avec l'astérisque) et - bien sûr - gzip et mv s'en plaindront. En définissant le drapeau "nullglob" via 'shoot -s nullglob', nous empêchons le retour d'un chemin non-existant (inexistant). L'autre commande à la fin 'shoot -u null glob' réinitialise ce drapeau à sa valeur par défaut. – mauro

+0

re-gunzip: ma commande est correcte car j'ai utilisé l'option '-d' (decompress) (" gunzip "=" gzip -d "). – mauro