Renommer des fichiers à l'aide de sed et mv

Je veux renommer les fichiers dans le format:

img_MM-DD-YY_XX.jpg

img_MM-DD-YY_XXX.jpg

:

newyears_YYYY-MM-DD_XXX.jpg

Où:

  • AAAA = année
  • MM = mois
  • JJ = jour
  • XXX ou XX = numéro de photo

Je suis venu avec ce script mais il ne fonctionne pas:

for filename in ?*.jpg; do
        newFilename=$(echo $filename | \
        sed 's/img_\(.*\)-\(.*\)-\(.*\)_\([0-9][0-9]\)\./newyears_20--_0./;
                s/img_\(.*\)-\(.*\)-\(.*\)_\([0-9][0-9][0-9]\)/newyears_20--_/' -)
        mv $filename $newFilename
done

Toute aide serait grandement appréciée.

Ce qui se passe lorsque vous exécutez votre script? Ce n' for filename in ?*.jpg; do echo $filename; done retour?
J'ai trouvé le problème. Suppression de la barre oblique inverse "\", après la pipe, "|", ce qui fait que cela fonctionne. Je suppose que les retours à la ligne ne doit pas être échappés dans les scripts bash. Est-ce correct?
la barre oblique inverse n'est pas nécessaire, mais ne devrait pas causer d'ennuis. Pourrait-il y avoir un espace après, ou quelque chose comme ça?

OriginalL'auteur tiagob | 2011-04-15