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 :

Copier un fichier dans les derniers sous dossier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Hamtaroux
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2019
    Messages : 23
    Par défaut Copier un fichier dans les derniers sous dossier
    Bonjour,

    d'habitude j'utilise la commande suivante pour copier mon fichier dans les dossiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -d */ | xargs -n 1 cp -v fichier.txt
    avec une arborescence du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls dossier_1
    text1 text2

    mais, cette fois-ci je souhaite copier un fichier dans les derniers sous dossier;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dossier_1 dossier_2 
    ls dossier_1
    dossier_11 dossier_12
    ls dossier_11
    text1 text2 text3
    ls dossier_2 
    dossier_21 dossier_22
    Comment copier un même fichier mais uniquement dans le dernier sous dossier?

    car en ajoutant la fonction recursive de cp, cela copie ce meme fichier mais dans tout les sous dossier or je veux uniquement le dernier sous dossier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -d */ | xargs -n 1 cp -v -r  fichier.txt


    Merci,

    Hamtaroux

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    ou pour en parser la sortie !

    il faut que tu définisses "dernier sous-dossier", car cela n'a pas de sens au niveau du système de fichier.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti Avatar de Hamtaroux
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2019
    Messages : 23
    Par défaut
    ce n'est pas un script en fait, je comptais faire ça directement sur le terminal;

    du coup vaut mieux écrire un script c'est ca?

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    non, tu peux faire ça (enfin, non, pas ça, pas comme ça ) sur la ligne de commande, il faut seulement ne pas utiliser ls pour autre chose qu'afficher les données, pas les parcourir*.

    il faut que tu définisses "dernier sous-dossier"
    une fois cela défini, on verra par quel bout le prendre soit en 100% bash, soit avec find...

    * c'est une question de bonnes pratiques (best practices), car les noms de fichiers peuvent contenir des caractères contenus dans l'IFS, ce qui peut nuire à leur lecture/restitution.
    imagine un fichier dont le nom serait , son utilisation par une commande lisant la sortie de ls ne sera pas correcte : elle lira trois entités mon, fic, hier, au lieu de 'mon fic'$'\nhier'
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti Avatar de Hamtaroux
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2019
    Messages : 23
    Par défaut


    en fait je souhaite copier le fichier "FICHIER.txt" dans les chemins commençant par:

    I1 I2 I3 I4 I5 I6

    l'architecture est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    hamtaroux:~/Bureau$ ls
    I1/ I2/ I3/ I4/ FICHIER.txt DOSSIER_QUELCONQUE/
    hamtaroux:~/Bureau$ ls I1/
    X_1_3/
    hamtaroux:~/Bureau$ ls I1/X_1_3/
    p_10/  p_15/  p_19/  p_24/  p_28/  p_8/
    hamtaroux:~/Bureau$ ls I2/X_2_5/
    p_10/  p_15/  p_20/  p_25/  p_30/  p_5/

    Ce que j'essaye de faire c'est de copier FICHIER.txt dans I*/*/*: et d'avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hamtaroux:~/Bureau$ ls I1/X_1_3/p_10/
    FICHIER.txt
    hamtaroux:~/Bureau$ ls I1/X_1_3/p_15/
    FICHIER.txt
    et de ne pas avoir ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hamtaroux:~/Bureau$ ls I1/X_1_3/
    p_10/  p_15/  p_19/  p_24/  p_28/  p_8/ FICHIER.txt
    hamtaroux:~/Bureau$ ls I1/
    X_1_3 FICHIER.txt


  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    ce n'est pas si simple : il faut réfléchir à comment trouver le répertoire le plus profond sous un répertoire donné.
    le chemin du répertoire le plus profond contiendra le nombre le plus élevé de slashes.

    d'abord, tu dois savoir comment afficher la liste des répertoires avec bash, il faut positionner l'option globstar avec shopt, puis faire une boucle for pour pouvoir traiter les répertoires l'un après l'autre,
    ensuite, il faut retirer tous les caractères autres que le slashes (avec tr, ou sed) pour pouvoir les compter
    ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. recuperer seulement les derniers sous dossiers d'un repertoire
    Par dalila15 dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 24/02/2017, 13h53
  2. Copier un fichier dans chaque sous-dossier grace a command !
    Par k3vin dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 26/12/2009, 17h15
  3. Copier un fichier dans tous les dossier qui contiennent un .ini
    Par proteine1024 dans le forum VBScript
    Réponses: 12
    Dernier message: 17/09/2009, 08h19
  4. [XL-2007] copier des textbox dans les dernieres lignes vides
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/08/2009, 18h37

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