J'ai un répertoire avec des fichiers .MP3 dont je voudrais changer les extensions en .mp3. Quelle est la façon la plus simple de procéder? Je pense que quelque chose dans le sens de:
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \;
... même si je sais que ce n'est pas tout à fait ça. :) La substitution n'est pas correcte et je ne sais pas comment utiliser à la fois une mv
et une sed
commande avec -exec
in find
.
Aurais-je besoin d'un script bash pour cela?
En zsh:
Pour prendre également soin de
.Mp3
ou.mP3
fichiers:la source
Vous pouvez utiliser la commande rename (attention, il existe deux implémentations principales avec des API différentes) pour celles-ci. Par exemple, pour changer la casse des extensions de nom de fichier du haut vers le bas, essayez ceci:
avec
rename
fromutil-linux
(parfois appelérename.ul
), en supposant qu'il.JPG
ne se produit qu'une seule fois dans les noms de fichieravec le
rename
fromperl
(parfois appeléprename
; plusieurs variantes ont été publiées):Voici quelques tutoriels sur la façon dont il est passé d'un script bash désordonné à cette commande simple pour exactement votre cas d'utilisation.
Une autre commande sophistiquée pour ce faire est
pax
. Si vous utilisez ZSH pour votre shell, vous pouvez également utiliserzmv
.la source
syntax error at (user-supplied code), near "."
lorsque j'exécute cette commande.Utilisez perl-rename , couteau suisse de renommage de fichiers avec des expressions régulières (sur ubuntu, cela est fourni avec le paquet perl en tant que prename):
Si vous êtes du genre prudent, utilisez les options -n et -v pour renommer perl pour voir ce qu'il fera réellement.
la source
Vous avez besoin d'un script, car les "extensions" sous Linux ne sont en fait que des parties de la chaîne de nom de fichier. Vous devez faire quelques manipulations de chaînes dans le script pour obtenir le nouveau nom.
Les guillemets doubles sont importants si vous avez des noms de fichiers contenant des espaces. Je pensais qu'une partie de la double citation était un peu évidente.
la source
En bash:
la source
sauvegardez d'abord vos fichiers! vous pouvez utiliser un one-liner en python:
ÉDITER:
Voici une explication détaillée de la façon dont fonctionne le one-liner. En utilisant
python -c
nous passons une commande à l'interpréteur python. Après avoir importé les bibliothèquesos
pour larename
fonction etglob
pour la liste des fichiers, nous devons parcourir la liste des fichiers dans le répertoire donné, que j'ai appeléPATH_TO_YOUR_DIRECTORY
, par exemple quelque chose comme./*
pour tout dans le répertoire actuel.Dans la syntaxe à une ligne, malheureusement, les
for
boucles ne fonctionnent pas après laimport
notation, nous devons donc utiliser la notation entre crochets. C'est-à-dire que pour chaque nom de fichier ou de répertoire quiglob
nous donne le chemin donné sous la forme d'une chaîne, nous remplaçons * .MP3 par * .mp3.Étant donné que OP n'a pas mentionné la recherche récursive, je ne l'ai pas inclus en premier lieu.
la source