J'ai plusieurs dossiers de fichiers vidéo qui doivent être renommés en quelque chose d'uniforme, par exemple: foldername.videotypexvideonumber.avi
. J'ai envisagé de créer un script Shell pour rendre cela plus facile. La commande mv
semble être la meilleure façon de procéder.
Cependant, chaque guide/tutoriel/page de manuel que j'ai vu dit que lorsque je renomme un fichier, je dois également inclure l'extension du fichier. Ce serait normalement bien, mais certains dossiers contiennent des vidéos de plusieurs types de fichiers, par exemple .mkv et .avi et même certains fichiers .rmvb.
Donc, ce que je dois savoir, c'est s'il existe un moyen de renommer les fichiers via le terminal sans avoir à spécifier le type de fichier lors de cette opération - essentiellement pour que l'extension reste la même, quelle qu'elle soit avant de renommer.
Réponse rapide:
Vous ne pouvez pas faire cela car les extensions font partie du nom de fichier.
Réponse longue:
Vous pouvez utiliser une interface graphique pour effectuer des renommages avancés comme purrr
ou gprename
Dans votre script de renommage par lots, vous pouvez utiliser les techniques suivantes de fractionnement de nom de fichier:
FULLFILENAME="/home/user/video/myvideo-release.xvid.128kbps.avi"
DIRNAME=$(dirname ${FULLFILENAME}) #-- /home/user/video
BASENAME=$(basename ${FULLFILENAME}) #-- myvideo-release.xvid.128kbps.avi
FILENAME=${BASENAME%.*} #-- myvideo-release.xvid.128kbps
EXTENSION=${BASENAME##*.} #-- avi
Il serait utile de savoir exactement ce que vous voulez faire, mais vous pouvez certainement le faire. Connaître expansion des paramètres BASH est probablement assez nécessaire.
Selon ce que vous devez faire, vous devrez peut-être séparer l'extension et le nom de fichier, ou peut-être pas.
Je vais supposer que vous avez déjà cd
ed dans le dossier avec les fichiers en question.
cas 1: supposons que vous souhaitiez remplacer la chaîne "bad" par "good" dans chaque nom de fichier; alors vous pouvez utiliser une simple substitution, c'est-à-dire que vous pouvez faire quelque chose comme:
for file in * ; do mv "$file" "${file//bad/good}" ; done
(Assurez-vous qu'il n'y a pas de changement, le fait de changer de mauvais en bon remplacera quelque chose déjà là.) Cela fonctionnera quelle que soit l'extension.
cas 2: Supposons que vous devez ajouter "nouveau" avant l'extension, quelle qu'elle soit, alors vous pouvez faire:
for file in * ; do filename="${file%.*}" ; extension="${file##*.}" ; mv "$file" "${filename}new.${extension}" ; done
L'extension restera la même, quelle qu'elle soit.
Je donnerais plus de conseils, mais encore une fois, je ne sais vraiment pas ce que vous essayez de faire, exactement.
[temp] λ = ls
test.doc test.rtf test.txt
[temp] λ = for f in *; do mv "$f" test2`echo "$f" | sed 's/[^.]*//'`; done
[temp] λ = ls
test2.doc test2.rtf test2.txt
Il pourrait y avoir une façon plus élégante de le faire, mais cela fonctionne
Remplacez test2 par tout ce que vous voulez un compteur ou quelque chose.