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'
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?
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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ce script en bash:
sed -E
est pris en charge pargnu sed
aussi.Nice. Peut ajouter des guillemets autour de $nom et $newFilename bien que si il y a des espaces dans les valeurs.
Merci, Oui c'est vrai et c'est fixé maintenant.
OriginalL'auteur anubhava
Sans une boucle for.
Omettre de la tuyauterie de bash pour voir les résultats avant de mv
Grâce à http://www.gnu.org/software/sed/manual/sed.html#Rename-files-to-lower-case
OriginalL'auteur earthdan
OriginalL'auteur Idelic
Je me souviens de déconner avec ce genre de chose. Je l'ai trouvé souvent utile de créer un script que vous exécutez à faire ce que vous voulez:
ie. de sortie de votre script serait un fichier comme:
Pour créer cette, il suffit de faire un ls | grep date motif | sed script à coller mv fichier1 fichier2 > myscript
alors juste l'exécuter ./myscript
Cette façon, vous avez un meilleur regard sur la production intermédiaire de comprendre ce qui ne va pas.
OriginalL'auteur Larry Watanabe
Cette petite variante qui fonctionne pour moi:
La seule différence est l'utilisation de l'explicite
-e
options à la place d'un point-virgule.Testé sur mac os X 10.6.7.
OriginalL'auteur Jonathan Leffler
Il pourrait être traité par une simple script bash.
OriginalL'auteur Yi Zhao
Ruby(1.9+)
OriginalL'auteur kurumi