J'essaie de renommer un tas de morceaux de musique dans un répertoire, mais j'ai eu cette erreur:
Lors du déplacement de plusieurs fichiers, le dernier argument doit être un répertoire
Voici le script:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Cela fonctionne pour un fichier sans espace, comment modifier ce script?
-
. Au lieu d'echo "$file"
utilisationprintf '%s\n' "$file"
.mv
. :) Vous avez géré cette affaire :) --- Ce que je voulais dire, c'était un problème avececho
lui-même. Par exemple GNU echo ( à la fois intégré autonome et bash) ne seront pas imprimer ces chaînes:-n
,-e
et-E
. Même selon la définition POSIX, il n'est pas possible de l'utiliser deecho
manière fiable car certaines situations ne sont pas définies. Conforme à XSIecho
interprètera les séquences d'échappement antislash. ---printf '%s\n'
n'a pas de tels effets indésirables et dépendants de la mise en œuvre.Vous pouvez utiliser prename, qui est souvent distribué avec Perl. (Par exemple, dans Debian, / usr / bin / prename est installé par le
perl
paquet.) S'il n'est pas empaqueté par votre distribution (recherchezprename
etrename
dans les emplacements binaires conventionnels), il est disponible pour téléchargement à partir d'un certain nombre d'endroits, tels que par exemple ici , ici ou ici .Ce script prend une expression régulière à appliquer à chacun des noms de fichiers et un ensemble de noms de fichiers, et modifie les noms de ces fichiers en fonction de cette expression régulière.
Par exemple, vous pourriez faire
pour montrer ce qui se passerait si vous supprimez les cinq premiers caractères des noms de fichiers. Pour réellement exécuter le changement de nom, il vous suffit de supprimer le
-n
.la source