Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 24-11-2013 14:10:26

Invité-1
Invité

[Résolu] Créer et nommer plusieurs fichiers en une passe ?

Bonjour,

Je cherche une (des) piste(s) et pas une solution toute faite, c'est pour apprendre et tester. smile

Problématique.

Soit un répertoire contenant plusieurs fichiers compressés du type file-1.list.gz, file-2.list.gz, etc... il y en a 10.

Je sais décompresser ces fichiers avec gunzip (qui me donne en retour des fichiers file-1.list, etc...).
Je sais trier le contenu de ces fichiers avec sort -d.
Je sais rediriger le contenu trié vers un nouveau fichier avec sort -d file-1.list > file-1.txt.

J'ai donc bien tout mes fichiers au contenu trié par ordre alphabétique. Nickel. Mais en 10 opérations successives...

Mon souhait serait de faire tenir (si possible) l'ensemble de la procédure pour l'ensemble des fichiers sur une seule ligne de commande.

(Les fichiers en question sont les descriptifs des DVD Debian que l'on trouve sur cette page.)


Merci de me mettre sur une ou plusieurs pistes. smile


à plus,

Invité-1

Dernière modification par Invité-1 (25-11-2013 14:37:26)

#2 24-11-2013 14:21:26

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

Tu peux te faire un petit script shell, genre dans un fichier ~/bin/blabla

#!/bin/sh
 
for i in *.gz;
do
  gunzip "$i"
  F=$(basename "$i" ".gz")
  sort -d $F > $F
done



Tu le rends exécutable,

chmod +x ~/bin/blabla



Tu t'assures que ~/bin/ est bien dans ton PATH (à faire dans un shell qui a été ouvert après que le dossier ~/bin/ ait été créé) :

echo $PATH



Avec ça, il te suffira de taper « blabla » dans un dossier pour exécuter le tout.

Tel quel le script ne regarde que les fichiers du dossier courant. Tu peux regarder la page de script shells du wiki pour voir comment améliorer le script.


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 24-11-2013 14:25:40

Invité-1
Invité

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

OK, merci, je vais partir là-dessus. smile


à plus,

éricj

#4 25-11-2013 12:15:29

Invité-1
Invité

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

Bon, ce n'est sûrement pas très "propre" mais ça fonctionne. smile

#!/bin/sh

# décompression de tous les fichiers .gz en fichiers .list

for i in *.list.gz;
do
  gunzip "$i"
done

# tri par ordre alphabétique du contenu de chaque fichier .list
# redirection du contenu trié dans un fichier de même nom avec extension .txt

for i in *.list;
do
  sort -d "$i" > "$i".txt
done

# détruit les fichiers .list originaux

rm *.list

echo "Tri alphabétique effectué."
 



Merci du coup de main. wink


à plus,

éricj

Dernière modification par Invité-1 (25-11-2013 13:51:56)

#5 25-11-2013 13:08:52

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

Une autre solution :

#!/bin/sh
 
for i in *.list.gz;
do
  zcat "$i" | sort -d > $(basename "$i" ".list.gz").txt
done



Où « basename foo.bar .bar » donne comme résultat « foo » et $(commande) est remplacé par le résultat de la commande.


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#6 25-11-2013 13:38:06

Invité-1
Invité

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

C'est plus concis... effectivement. big_smile


<edit>

Pour n'avoir plus que les seuls .txt au final :

#!/bin/sh
 
for i in *.list.gz;
do
  zcat "$i" | sort -d > $(basename "$i" ".list.gz").txt
done
rm *.list.gz



</edit>


à plus,

éricj

Dernière modification par Invité-1 (25-11-2013 15:10:31)

#7 25-11-2013 16:31:28

Invité-1
Invité

Re : [Résolu] Créer et nommer plusieurs fichiers en une passe ?

Version augmentée qui va chercher les fichiers sur le net puis fait le travail ci-dessus :

#!/bin/bash
 
# Récupération des listes de contenu des CD/DVD Debian et tri alphabétique de ce contenu
 
# On teste la présence d'une connexion Internet active
for interface in $(ls /sys/class/net/ | grep -v lo);
do
  if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]];
  then
    OnLine=1;
    # si une connexion est active on télécharge les fichiers listes
    curl -O http://cdimage.debian.org/cdimage/release/7.2.0/amd64/list-dvd/debian-7.2.0-amd64-DVD-[1-10].list.gz
    # décompression des fichiers .gz, tri alphabétique de leur contenu et écriture de ce contenu trié dans un fichier .txt
    for i in *.list.gz;
    do
      zcat "$i" | sort -d > $(basename "$i" ".list.gz").txt
    done
    # effacement des fichiers téléchargés
    rm *.list.gz
    # annonce de bonne fin
    echo "Téléchargement et tri alphabétique des liste effectués ! :)";
  fi
done
 
# Si aucune connexion n'est active on le signale et on arrête le script
if ! [ $OnLine ];
then
  echo "Aucne connexion Internet n'est active. Arrêt du script. :(" > /dev/stderr;
  exit;
fi



(La partie qui teste la connexion vient de stackoverflow.com)


à plus,

éricj

Dernière modification par Invité-1 (25-11-2013 16:32:11)

Pied de page des forums