IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Boucle et espace dans un nom de fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut Boucle et espace dans un nom de fichier
    Bonjour,

    Je rencontre une difficulté et ai besoin de conseils d'experts, ci-dessous un exemple pour illuster :

    Je liste dans un fichier une arborescence et avec une boucle for j'ajoute en colonne 2 la taille du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [kevin@server1 ~]$ cat LISTE_rep1
    /home/kevin/rep1/fichier9.sh
    /home/kevin/rep1/fichier4.sh
    /home/kevin/rep1/Mon_fichier
    /home/kevin/rep1/fichier6.sh
    /home/kevin/rep1/rep11
    /home/kevin/rep1/rep11/fichier1.sh
    /home/kevin/rep1/rep11/tutu.sh
    Comme on peut le constater le nom "Mon_fichier" contient le tiret du 8.

    Pour ajouter la taille à droite du nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [kevin@server1 ~]$ for i in $(cat LISTE_rep1); do echo "$i `wc -c < $i`";done
    /home/kevin/rep1/fichier9.sh 332
    /home/kevin/rep1/fichier4.sh 375
    /home/kevin/rep1/Mon_fichier 25
    /home/kevin/rep1/fichier6.sh 551
    /home/kevin/rep1/rep11 0
    /home/kevin/rep1/rep11/fichier1.sh 239
    /home/kevin/rep1/rep11/tutu.sh 19
    Admettons que dans mon fichier de départ LISTE_rep1 il y ait des noms avec un espace : par exemple ==> "Mon fichier" au lieu de "Mon_fichier" comme précédemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [kevin@server1 ~]$ cat LISTE_rep1
    /home/kevin/rep1/fichier9.sh
    /home/kevin/rep1/fichier4.sh
    /home/kevin/rep1/Mon fichier
    /home/kevin/rep1/fichier6.sh
    /home/kevin/rep1/rep11
    /home/kevin/rep1/rep11/fichier1.sh
    /home/kevin/rep1/rep11/tutu.sh
    Cette fois-ci problème si j'essaie d'ajouter la taille en colonne 2 (car "Mon" et "fichier" sont séparés) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [kevin@server1 ~]$ for i in $(cat LISTE_rep1); do echo "$i `wc -c < $i`";done
    /home/kevin/rep1/fichier9.sh 332
    /home/kevin/rep1/fichier4.sh 375
    -bash: /home/kevin/rep1/Mon: Aucun fichier ou dossier de ce type
    /home/kevin/rep1/Mon 
    -bash: fichier: Aucun fichier ou dossier de ce type
    fichier 
    /home/kevin/rep1/fichier6.sh 551
    /home/kevin/rep1/rep11/fichier1.sh 239
    /home/kevin/rep1/rep11/tutu.sh 19
    Dans le fichier LISTE_rep1 j'ai remplacé "Mon fichier" par "Mon\ fichier" mais ça ne marche pas non plus.

    Avez-vous une astuce pour ce type de souci ?

    Merci.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 361
    Par défaut
    Passe par un while read, le for n'est pas adapté pour ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do echo -n "$line " ; wc -c <"$line" ; done <fichier
    Mais si tu peux faire 'taille "nom de fichier"', tu as aussi la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -z 's/\n/\x00/g' fichier | wc -c --files0-from=-

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Merci pour ta réponse, super!

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Jai testé la 1ère solution : c'est parfait.

    La seconde, pour avoir "taille "nom de fichier" j'ai dû mal interpréter la fin peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    [kevin@server1 ~]$ sed -z 's/\n/\x00/g' LISTE_rep1 | wc -c --files0-from=-
    sed : option invalide -- 'z'
    Utilisation: sed [OPTION]... {script-seulement-si-pas-d'autre-script}
    [fichier-d'entrée]...
     
      -n, --quiet, --silent
                     supprimer l'écriture automatique de l'espace des motifs
      -e script, --expression=script
                     ajouter le script aux commandes à être exécutées
      -f fichier-script, --file=fichier-script
                     ajouter le contenu de fichier-script aux commandes
                     à être exécutées
      --follow-symlinks
                     follow symlinks when processing in place; hard links
                     will still be broken.
      -i[SUFFIX], --in-place[=SUFFIX]
                     edit files in place (makes backup if extension supplied).
                     The default operation mode is to break symbolic and hard links.
                     This can be changed with --follow-symlinks and --copy.
      -c, --copy
                     use copy instead of rename when shuffling files in -i mode.
                     While this will avoid breaking links (symbolic or hard), the
                     resulting editing operation is not atomic.  This is rarely
                     the desired mode; --follow-symlinks is usually enough, and
                     it is both faster and more secure.
      -l N, --line-length=N
                    spécifier la longueur de coupure de ligne désirée pour la
                    commande `l'
      --posix
                     désactiver toutes les extensions GNU.
      -r, --regexp-extended
                     utiliser la syntaxe des expressions régulières
                     étendues dans le script.
      -s, --separate
                    considérer les fichiers comme séparés plutôt que comme un
                    simple flux long et continu.
      -u, --unbuffered
                     charger des quantités minimales de données depuis les
                     fichiers d'entrée et libérer les tampons de sortie plus
                     souvent
          --help     afficher cette aide et sortir
          --version  afficher les informations de version du logiciel et sortir
     
    Si aucune option -e, --expression, -f ou --file n'est donnée, le
    premier argument qui n'est pas une option sera pris comme étant le script
    sed à interpréter. Tous les arguments restants sont les noms des fichiers
    d'entrée; si aucun fichier d'entrée n'est spécifiée, l'entrée standard
    est lue.
    GNU sed home page: <http://www.gnu.org/software/sed/>.
    General help using GNU software: <http://www.gnu.org/gethelp/>.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Espace dans un nom de fichier
    Par anisr dans le forum Général VBA
    Réponses: 2
    Dernier message: 02/05/2007, 07h45
  2. support des espaces dans les noms de fichiers
    Par menuge dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2006, 09h02
  3. suppression des espaces dans les noms de fichiers
    Par menuge dans le forum Général Python
    Réponses: 8
    Dernier message: 22/10/2006, 12h01
  4. [BATCH] Espaces dans les noms de fichiers :|
    Par andlio dans le forum Windows
    Réponses: 1
    Dernier message: 03/08/2006, 03h42
  5. Espace dans un nom de fichier
    Par pouli dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2006, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo