J'ai un Go de musique sur mon disque dur formaté avec EXT4. Je souhaite déplacer ces fichiers vers une partition HDD au format FAT. Cependant, je ne peux pas déplacer la plupart de mes fichiers car ils contiennent ":" dans les noms (par exemple, "Acte 2: ....." pour les opéras). Existe-t-il un moyen avec la ligne de commande pour renommer tous mes fichiers de "XXXX: XXXX" à "XXXX-XXXX"?
la source
find .
nom d'un sous-répertoire précède son contenu. Donc, si vous avez un fichier en/1:/2:
premier/1:/
sera renommé/1-/
. Maintenant , vous ne pouvez pas renommer/1:/2:
à/1-/2-
cause/1:/2:
n'existe pas.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
Et puis les fichiers:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Modifiez 20 à la profondeur maximale du dir. structure. Ne doit pas être exact - peut être plus grand. Cela prendra du temps s'il est réglé sur un très grand nombre.Je ne suis pas sur ma machine Linux pour le moment, je ne peux donc donner que des informations approximatives.
Linux a un utilitaire de ligne de commande appelé
rename
qui fonctionne avec, entre autres, des expressions régulières ou des expressions régulières. Vous devriez pouvoir l'utiliser avec une expression régulière comme "s /: / - /" sur vos fichiers pour obtenir le renommage que vous souhaitez.Juste pour être sûr, faites-le en petits lots et / ou premier test avec la simulation (renommer a un drapeau qui vous donne juste l'ancien nom et le nouveau nom du fichier sans réellement renommer - utilisez-le pour vérifier d'abord)
la source
Il s'agit d'une solution en python qui gère le cas où les fichiers ne sont pas nécessairement dans le même répertoire.
rootdir
au répertoire le plus à l'extérieur considéré (utilisez le nom de chemin complet commençant par /. Pas de raccourcis ou de variables env comme ~ autorisé). Pas besoin de mettre \ avant les caractères spéciaux - par exemple, si le répertoire le plus à l'extérieur est /.../Mon disque dur, mettezrootdir = "/.../My HDD"
NOTrootdir = "/.../My\ HDD"
(notez le "s) [Je ne suis explicite que parce que vous ne connaissez peut-être pas python. prévu.]logfile
à l'emplacement souhaité du fichier journal. À la fin, ce fichier contiendra la liste des fichiers renommés - pour référence future.python rename.py
.Avertissement: effectuez un test sur un petit échantillon avant de risquer un Go entier de musique.
Détails: le changement de nom s'effectue à partir des fichiers les plus internes vers l'extérieur.
la source
Je me rends compte que c'est un très vieux poste. La solution récursive d'AeroGT80 est très complète, mais elle est assez lente. Je l'ai fait fonctionner pendant environ une demi-heure sur un serveur plus lent et cela n'a été fait qu'à moitié - je pense qu'il s'agissait d'environ 73 000 fichiers dans environ 300 sous-répertoires.
La solution ci-dessous fonctionnera beaucoup plus rapidement (elle fonctionne sur tous les fichiers d'un répertoire, au lieu de chaque fichier un par un - en utilisant la solution non récursive d'AeroGT80). Le seul problème est qu'il ne descend que dans un répertoire en profondeur (il n'est donc pas entièrement récursif comme sa solution), mais je suis sûr qu'il pourrait être modifié assez facilement.
la source