Renommer un fichier à la console

a marqué ce sujet comme résolu.

Bonjour,
Je ne suis pas très familier avec la console linux. J’aimerais renommer des fichiers sur ma RPi (avec OSMC installé dessus). Malheureusement je n’arrive pas à le faire en suivant la procédure que j’ai trouvé . Et comme la commande man n’est pas installé avec OSMC, je ne peux pas vérifier.

J’ai fais ceci :

1
mv "s01e01 Une nouvelle ??re (1).mov" "s01e01 Une nouvelle ere (1).mov"

il me dit : mv: cannot stat 's01e01 Une nouvelle ??re (1).mov': No such file or directory alors que le fichier existe (j’ai fais un copier-coller de ls).

J’ai un problème d’encodage avec un caractère. Je n’arrive pas à le modifier avec FIlezilla, alors je voulais essayer à la console.

De plus, j’aimerais savoir comment faire faire pour renommer de façon récursive les noms de fichiers ? Par exemple remplacer SA05 par s05e.

Merci d’avance !

+0 -0

Bonjour,

Une idée comme ca pour le nom de fichier : essaie l’auto-complétion.

mv s01e01

puis tab + tab, ca devrait compléter le nom de fichier automatiquement.

Pour renommer en masse des fichiers, il va falloir que tu utilises des scripts bash. Ca va demander un plus d’implication en connaissance du shell de linux, ou d’aller voir du coté de la commande rename.

Salut,

je dirai que ça vient des guillemets, qui empêchent la caractère joker ? d’être interprété correctement par ton shell. Une solution serait d’échapper les espaces à la main :

1
mv s01e01\ Une\ nouvelle\ ??re\ \(1\).mov s01e01\ Une\ nouvelle\ ere\ \(1\).mov
+0 -0

[OSMC]

Très bon choix, je suis personnellement fan :) Par contre, ce n’est plus comme ça qu’on met les tags, mais dans un champ séparé à la création du topic !


Pour ton premier problème, y’a peut être moyen de s’arranger avec un joker (*) suffisamment bien placé, je pense. Ça dépend combien de fichiers portent à peu près le même nom. Teste avec ls avant, au cas ou.

Pour le second problème, bash possède une syntaxe de remplacement:

1
2
$ i="test_SA05"; echo ${i/SA/s}
test_s05

(donc une boucle for i in * et ça devrait marcher)

Sinon, si c’est plus tordu, je pense que sed et un peu de regex peuvent faire des miracles :)

EDIT: waw, quelle réactivité !

+0 -0

Merci pour votre aide !

Pour répondre :
@Gwend@l : c’est marrant, quand je fais tab, il trouve le nom du fichier sans problème, c’est à dire avec l’accent comme il faut : s01e01\ Une\ nouvelle\ ère\ \(1\).mov s01e. Du coup je ne sais pas si le nom du fichier est vraiment corrompu ou s’il y a une histoire d’encodage à changer qq part ?

Pour ce qui est de mes connaissances, je m’y connais très peu en bash et commande linux, mais je peux apprendre. En revanche, je maîtrise les regex.

@Gabbro : justement tab à l’ai de faire ce que tu propose :)

@pierre_24 : Ah ah, oui, c’est pas mal. Je découvre, la configuration de base est simple par contre ça devient un peu plus difficile quand on veut aller plus loin. Mais c’est vraiment bien !
Oups, désolé, j’ai tellement l’habitude de faire comme ça que j’ai pas fait gaffe !

En général c’est juste des rechercher-remplacer à faire. Le plus complexe que j’ai à faire est qqch du genre : rechercher #(.)- ([0-9]+) -(.)# et remplacer par #$1 - sXe$2 - $3#.

+0 -0

Ok, je vais regarder du côté de sed :)

Par contre pour ce qui est du renommage, il ne veut pas. J’ai l’impression que le è est bien enregistré mais il ne veut pas l’afficher, car quand j’essaye de le renommer en échappant les espaces il me fait ça :

1
2
osmc@osmc:/media/DD DE SIM/Serie/Stargate Atlantis/Saison 1$ mv s01e01\ Une\ nouvelle\ ??re\ \(1\).mov s01e01\ Une\ nouvelle\ ère\ \(1\).mov
mv: cannot stat 's01e01 Une nouvelle \303\250??e (1).mov': No such file or directory

J’ai essayé d’échapper le point d’intérogation aussi, sans succès. Alors je sais pas trop quoi faire :/

+0 -0

Je plussoie largement la solution du joker. Même si perso j’utilise toujours Tab pour régler le problème.

Sinon, on peut également s’attaquer à la racine du problème.
Certainement que les noms du systèmes de fichiers sont écrits en utf8 et qu’ils sont lu en autre chose.

Peut-être monter le système avec comme option : utf8=true ou iocharset=iso8859-15 (latin9 mais c’est pas le must, le must c’est vraiment utf8=true).

Ça se fait soit dans fstab soit directement avec l’option -o de mount.

+0 -0

Je n’ai rien désolé pour t’aiguiller.

Rien de plus que te dire que ton fichier fstab devrait ressembler à une suite d’entrées qui respecte ce format :

1
2
3
# <file system> <dir>   <type>  <options>   <dump>  <pass>
# Exemple :
/dev/sda4       /boot       vfat        rw,relatime,fmask=0022,dmask=0022,codepage=437,utf8=true,shortname=mixed,errors=remount-ro  0 2

Comme tu peux le voir dans les options, j’ai rajouté utf8=true. Ou peut-être "iocharset=utf8" comme recommandé ici :

http://www.linuxfromscratch.org/lfs/view/development/chapter08/fstab.html

+0 -0

J’ai ce ceci dans mon fichier

1
2
/dev/mmcblk0p1  /boot    vfat     defaults,noatime,noauto,x-systemd.automount    0   0
# rootfs is not mounted in fstab as we do it via initramfs. Uncomment for remount (slower boot)#/dev/mmcblk0p2  /    ext4      defaults,noatime    0   0

Mais je comprends pas vraiment ou est mon disque dur externe. Je dirais que c’est le mmcblk0p2, mais les noms c’est pas des sda normalement ?

+0 -0

mmc = MultiMemoryCard.
Par contre vu le déroulement du sujet, je te conseille de lire quelques trucs sur les lignes de commandes. Pour avoir les commandes basiques. Sinon généralement avec man commande tu as accès au manuel de la commande, sur comment l’utiliser.

Pour l’encodage, ça doit juste être le terminal. Que donne $LANG et $LC_CTYPE ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte