Ligne de commande malencontreuse.

Boulette -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je vous explique mon problème en quelques lignes.
J'utilise Linux Mint, et j'essaye de trouver une ligne de commande qui permet de convertir en minuscules les noms des fichiers écrits en majuscules. Le soucis de base est que ces fichiers sont stockés dans un dossier dont le nom est en majuscule, et qu'il est sensé, lui, le rester.

En testant différentes options, je suis tombé sur cette ligne de commande :

for f in `ls ./`; do mv -- "$f" "$(tr [:upper:] [:lower:] <<< "$f")" ; done

J'ai voulu la copier-coller dans le terminal pour voir si elle ferait ce que j'attends, en me disant qu'il faudrait sans doute remplacer le "ls ./" part "ls /le/chemin/vers/mon/dossier".

Sauf que je n'en ai pas eu le temps, j'ai copié collé la commande d'origine, et elle s'est exécutée telle qu'elle... J'ai eu une grosse frayeur en voyant tout ce que contenait mon bureau disparaître, puis j'ai compris qu'en fait, le dossier "Bureau" s'écrit avec une majuscule, tout ce qu'il contenait a été déplacé vers un dossier "bureau" en minuscule!

J'ai tout copier coller vers "Bureau", histoire de remettre les choses en ordre, mais n'étant qu'un grand débutant sous Linux, je m'inquiète de certains dossiers / fichiers système qui auraient pu avoir à souffrir de cette fausse manip'... Croyez vous que la commande ai pu me faire perdre quoi que ce soit, ou abimer quelque chose?

Merci de votre aide, comme je disais, je débute dans le monde du libre, et je suis un peu vite perdu...

Ps : Existe-t-il une commande qui permette de faire genre "Annulation" de la dernière commande tapée dans un terminal?

Merci d'avance à qui pourra me rassurer, ou m'aider le cas échéant!

Configuration: Linux / Firefox 82.0

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Si le dossier Bureau a été touché, c'est qu'apparemment la commande a été lancée depuis ton répertoire personnel (/home/$USER).

    Par contre, les autres dossiers de ce répertoire (Bureau, Documents, Images, Modèles, Musique, Public, Téléchargements) ont dû être impactés également ;-\

    La bonne nouvelle, c'est qu'aucun fichier/dossier système n'a été touché.

    Il n'existe pas de commande à proprement dit pour annuler une commande passée.
    Mais comme tu es sous Linux Mint, et si tu as activé Timeshift (Instantanés système), tu peux revenir en arrière…

    Sinon pour renommer des fichiers/dossiers il existe la commande rename :

    $ ls
    Bureau Documents Images Modèles Musique Public Téléchargements

    $ rename -v 'y/A-Z/a-z/' *
    Bureau renamed as bureau
    Documents renamed as documents
    Images renamed as images
    Modèles renamed as modèles
    Musique renamed as musique
    Public renamed as public
    Téléchargements renamed as téléchargements

    $ ls
    bureau documents images modèles musique public téléchargements


    ;-))

    0
  2. Boulette
     
    Salut, et merci pour ta réponse rapide.

    Alors effectivement, il me semble que la commande a dû être lancer à partir de mon répertoire perso...

    Et tu as raison, après vérif., les dossiers que tu cites (Images, Téléchargements...) sont aussi tous passé en minuscule! ^^'. Bon, si c'est que ça, c'est rien, je pourrais toujours les renommer...
    Ce qui m'a surpris aussi, c'est qu’apparemment, la commande que j'ai lancé accidentellement n'est pas récursive, car j'ai par exemple des fichiers / dossiers sur le bureau dont les noms comportent des majuscules qui ont été conservées...

    Bon, si il n'y a que les dossiers que tu dis qui ont été touchés, je suis rassuré... J'ai eu peur que ça concerne l'ensemble du disque dur à cause `du "`ls ./" de la commande. Mon manque d'expérience m'a fait croire que ça aller concerner la racine, mais je suppose du coup que c'est uniquement le dossier courrant, et sans récursivité, du coup...

    Le coup d'une commande pour annuler la précédente, j'avoue que moi même j'y croyais moyen... J'imagine qu'un "undo" valable quelque soit la commande effectuée, ce serait impossible ou presque à coder... ^^. Ce serait trop beau! ^^.

    J'avoue que j'ai négligé Timeshift, en plus! J'ai installé un système vite fait pour bosser dessus, et j'ai pas spécialement configuré...

    Par contre, ça aurait pu me sauver à l'instant T? Je croyais que Timeshift ne sauvegardait le système que périodiquement, et pas à chaque instant, à chaque commande qu'on tape, non?
    Je ne suis pas sûr, d'ailleurs, de bien avoir assimilé le principe : je crois qu'il faut utiliser Timeshift pour faire des images système (genre retenir les softs installés, leur config. etc...), et à côté, un logiciel de backup qui sauvegarde les documents persos, ce que Timeshift laisse de côté, c'est bien ça?

    Pour ce qui est de la commande, j'ai fini par en trouver une qui fonctionne. Mon défaut était que je me concentré sur un problème de majuscules/minuscule de manière générale, alors que les seuls fichiers concernés sont des JPGs.
    La commande qui me semble être la bonne, du coup, semble être :

    rename 's/JPG/jpg/' /le/dossier/sur/lequel/on/bosse/*

    Un gros merci pour tes renseignements et ton aide, présente et à venir! ;).
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      apparemment, la commande que j'ai lancé accidentellement n'est pas récursive
      Non, et c'est tant mieux dans tons cas.
      Sinon, certaines commandes possèdent une option de récursivité (-r ou -R en général) qu'il faut renseigner lors de la commande.
      J'avoue que j'ai négligé Timeshift […] Par contre, ça aurait pu me sauver à l'instant T?
      À l'instant T, non, mais en fonction du paramétrage des sauvegardes (quotidienne, hebdo, mensuelle), oui.
      et à côté, un logiciel de backup qui sauvegarde les documents persos, ce que Timeshift laisse de côté, c'est bien ça?
      Non, Timeshift sauvegarde ce que tu lui demandes de sauvegarder. Notamment ton répertoire perso avec la possibilité d'exclure certains dossiers.

      Pour la récursivité il faut activer une option (globstar) dans le shell à l'aide de la commande
      shopt -s globstar
      . Cette option va permettre entre autre de traiter les répertoires récursivement.
      Mais attention à ce que tu fais ;-\

      Un petit exemple en reprenant la commande
      rename
      utilisée plus haut mais avec des sous-répertoires.

      Aperçu de l'arborescence :
      $ tree
      .
      ├── Bureau
      ├── Documents
      ├── Images
      ├── Modèles
      ├── Musique
      ├── Public
      ├── rep
      │   ├── Bureau
      │   ├── Documents
      │   ├── Images
      │   ├── Modèles
      │   ├── Musique
      │   ├── Public
      │   ├── sousrep
      │   │   ├── Bureau
      │   │   ├── Documents
      │   │   ├── Images
      │   │   ├── Modèles
      │   │   ├── Musique
      │   │   ├── Public
      │   │   └── Téléchargements
      │   └── Téléchargements
      └── Téléchargements

      2 directories, 21 files


      Activation de l'option :
      $ shopt -s globstar


      Application de la commande en mode verbeux (note les 2 ** qui indique la récursivité) :
      $ rename -v 'y/A-Z/a-z/' **/*
      Bureau renamed as bureau
      Documents renamed as documents
      Images renamed as images
      Modèles renamed as modèles
      Musique renamed as musique
      Public renamed as public
      rep/Bureau renamed as rep/bureau
      rep/Documents renamed as rep/documents
      rep/Images renamed as rep/images
      rep/Modèles renamed as rep/modèles
      rep/Musique renamed as rep/musique
      rep/Public renamed as rep/public
      rep/sousrep/Bureau renamed as rep/sousrep/bureau
      rep/sousrep/Documents renamed as rep/sousrep/documents
      rep/sousrep/Images renamed as rep/sousrep/images
      rep/sousrep/Modèles renamed as rep/sousrep/modèles
      rep/sousrep/Musique renamed as rep/sousrep/musique
      rep/sousrep/Public renamed as rep/sousrep/public
      rep/sousrep/Téléchargements renamed as rep/sousrep/téléchargements
      rep/Téléchargements renamed as rep/téléchargements
      Téléchargements renamed as téléchargements


      Aperçu des changements :
      $ tree
      .
      ├── bureau
      ├── documents
      ├── images
      ├── modèles
      ├── musique
      ├── public
      ├── rep
      │   ├── bureau
      │   ├── documents
      │   ├── images
      │   ├── modèles
      │   ├── musique
      │   ├── public
      │   ├── sousrep
      │   │   ├── bureau
      │   │   ├── documents
      │   │   ├── images
      │   │   ├── modèles
      │   │   ├── musique
      │   │   ├── public
      │   │   └── téléchargements
      │   └── téléchargements
      └── téléchargements

      2 directories, 21 files
      0
  3. Boulette
     
    Je répond un peu tard, mais merci beaucoup pour tes réponses, ça m'a bien aidé, et bien rassuré aussi! :).

    Comme tu dis, j'ai eu un gros coup de bol pour la récursivité, moi qui maitrisait mal ce que faisait la ligne de commande que j'utilisais... Heureusement pour moi, il n'y a rien eu en fait!

    Pour Timeshift, j'ai zieuté des tutos et aussi un peu le logiciel en soit, et apparement, par défaut, il laisse de côté le répertoire perso, mais on peut l'inclure à la demande...

    Je me pose une question, du coup, à quoi ça peut bien servir d'avoir inclu en parallèle dans la distribution le logiciel "Outil de sauvegarde"?
    Il fait la même chose, il permet de faire un backup des données qu'on lui indique, non?
    J'ai vu que sur le net, certains recommandent même Timeshift, et en parallèle d'autres logiciels de sauvegarde comme Lucky backup... Mais à quoi ça sert d'avoir plusieurs logiciels pour faire la même chose, au final... C'est pas préférable de tout sauvegarder avec le même tool, pour restaurer plus facilement en cas de pépin?

    Merci pour tes exemples sur la récursivité, je ne connaissais même pas le coup de la double "**". ^^.

    Me concernant, vu que je suis passé à côté de la récursivité, justement, j'ai juste renommer manuellement les dossiers "Images, Musiques, Téléchargements,...", et je crois que ça roule comme ça, en tout cas, je n'ai constaté aucun soucis suite à ma mauvaise manip'. :).

    Sinon, pour ce qui est de mon soucis de départ, j'ai fini par comprendre que si j'avais autant de mal à trouver une commande qui fonctionne, c'est parce que mes fichiers sont stockés sur une clef USB en FAT 32...
    Le système FAT 32 est insensible à la casse, alors quand on lui demande de renommer "4.JPG" en "4.jpg", pour lui, c'est la même chose, alors il ne change rien du tout...

    C'est très discutable en terme d'optimisation, je pense, mais la seule solution que j'ai trouvé est de renommer les fichiers en deux temps.

    Pour l'exemplen, je commence par renommer "4.JPG" en "4.min", avec la ligne de commande :

    rename 's/JPG/min/' /dossier/des/images/*

    Puis je passe le "4.min" en "4.jpg" pour avoir enfin la bonne extension, avec la commande :

    rename 's/min/jpg/' /dossier/des/images/*

    C'est peut être pas exellent, mais ça fonctionne.

    Alors je partage ici car premièrement, il y a peut être des débutants qui galèrent autant que moi là dessus, et ça pourra peut être les aider à avancer, et deuxièmement, il me semble évident qu'il y a plein de gens bien meilleur que moi sur le forum qui pourront peut être proposer une solution plus optimisée que de faire 2 fois le même travail! :).

    En tout cas, merci encore, et peut être à la prochaine pour la prochaine bourde! Lol.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Re-
      Pour Timeshift, j'ai zieuté des tutos et aussi un peu le logiciel en soit, et apparemment, par défaut, il laisse de côté le répertoire perso, mais on peut l'inclure à la demande...
      Exactement.
      Je me pose une question, du coup, à quoi ça peut bien servir d'avoir inclu en parallèle dans la distribution le logiciel "Outil de sauvegarde"?
      Disons que TimeShift sert principalement à sauvegarder la partie système, et que "Outil de sauvegarde" sert plutôt à sauvegarder les données personnelles, et accessoirement les logiciels installés.

      il me semble évident qu'il y a plein de gens bien meilleur que moi sur le forum qui pourront peut être proposer une solution plus optimisée que de faire 2 fois le même travail!
      Malheureusement non ;-(
      Pas avec ce système de fichiers.
      Et la méthode que tu as utilisée est la meilleure et la seule possible à mon avis.
      0