J'ai un fichier pdf au format:
Author-YYYY-rest_of_text_seperated_by_underscores.pdf
John-2010-some_file.pdf
Smith-2009-some_other_file.pdf
Je dois renommer les fichiers pour que l'année soit la première, par exemple.
YYYY-Author-rest_of_text_seperated_by_underscores.pdf
2010-John-some_file.pdf
2009-Smith-some_other_file.pdf
Cela impliquerait donc de déplacer l'élément "AAAA" au début.
Je n'ai pas unix "Rename" et dois me fier à sed, awk, etc. Je suis heureux de renommer inplace.
J'ai essayé d'adapter cette réponse, n'ayant pas beaucoup de chance. Utilisation de sed pour renommer en masse des fichiers
Réponses:
4 pour la réponse № 1Voir BashFAQ # 100 pour des conseils généraux sur la manipulation des cordes avec bash. Une des techniques utilisées est extension des paramètres, qui est fortement utilisé ci-dessous:
pat=-[0-9][0-9][0-9][0-9]-
for f in *$pat*; do # expansion not quoted here to expand the glob
prefix=${f%%$pat*} # strip first instance of the pattern and everything after -> prefix
suffix=${f#*$pat} # strip first instance and everything before -> suffix
year=${f#"$prefix"}; year=${year%"$suffix"} # find the matched year itself
mv -- "$f" "${year}-${prefix}-${suffix}" # ...and move.
done
Au fait, BashFAQ # 30 discute de nombreux mécanismes de renommage, dont l’un en utilisant sed
pour exécuter des transformations arbitraires.
3 pour la réponse № 2
Utilisation de regex BASH:
re="^([^-]+-)([0-9]{4}-)(.*)$"
for f in *.pdf; do
[[ $f =~ $re ]] &&
echo mv "$f" "${BASH_REMATCH[2]}${BASH_REMATCH[1]}${BASH_REMATCH[3]}"
done
Lorsque vous êtes satisfait de la sortie, supprimez echo
commande avant mv
.