Ligne de commande malencontreuse.

Fermé
Boulette - 11 déc. 2020 à 17:33
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 19 déc. 2020 à 16:51
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
A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 411
Modifié le 11 déc. 2020 à 20:29
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
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 411
12 déc. 2020 à 15:32
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
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 411
19 déc. 2020 à 16:51
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