Je m'excuse par avance si cette question a déjà été traitée, mais j'ai effectué une longue recherche dans l'espoir de trouver une solution.
J'ai une application Automator fonctionnelle qui ajoute la date actuelle à six chiffres (AAMMJJ) à la fin du nom du fichier :
- Entrée : Nom de fichier.txt
- Sortie : Nom de fichier_181212.txt
Commande bash actuelle :
today=$(date +%y%m%d)
for f in "$@"
do
basename=${f##*/}
filename=${basename%.*}
path=${f%/*}
ext=${f##*.}
newfilename="$filename"_"$today"
mv "$f" "$path"/"$newfilename"."$ext"
done
C'est très bien, mais après l'avoir utilisé régulièrement, j'ai réalisé que ce serait bien de ne pas seulement ajouter la date du jour, mais de vérifier d'abord si une date est déjà ajoutée au nom du fichier ; si c'est le cas, il faut la supprimer et ajouter la date du jour, sinon il faut simplement ajouter la date du jour.
Il y a deux scénarios :
- Le nom de fichier contient une date quelconque (antérieure/actuelle/future) dans le format à 6 chiffres décrit précédemment, précédé d'un trait de soulignement (Nom de fichier_181212.txt).
- Le nom de fichier ne contient pas de format de date à 6 chiffres annexé (Filename.txt)
Je me rends compte que la solution que j'espère supprimera tout chiffre à six chiffres et son "_" précédent s'il existe, qu'il s'agisse d'une date ou non.
Est-il possible de faire précéder ma commande bash actuelle de quelque chose comme :
si une combinaison de chiffres existe immédiatement avant l'extension du fichier fichier (".ext") ET contient exactement 6 chiffres ET est précédé d'un trait de soulignement ("_"). un trait de soulignement ("_")
puis supprimez l'underscore plus 6 chiffres ET exécutez la commande bash listée ci-dessus
Si ce n'est pas le cas, exécutez la commande bash ci-dessus
Résumé J'essaie d'éviter de supprimer manuellement les dates qui peuvent exister sur un nom de fichier avant d'y ajouter la date du jour. Certains fichiers peuvent avoir des dates et d'autres non.
0 votes
Oui, mais il semble que dans ce cas, la commande de date ne soit pas pertinente car seuls 6 chiffres (plus le trait de soulignement précédent) doivent être trouvés, qu'il s'agisse d'une date passée, précédente ou future.
0 votes
Désolé, j'ai supprimé mon commentaire en réalisant qu'il est stupide.
0 votes
La date dans le nom du fichier n'est pas une date, mais du texte brut (chiffres), mais nous la voyons comme une date. Donc, si vous supprimez tous les chiffres dans le nom du fichier, cela fonctionnera-t-il ?
0 votes
Je pense que oui, mais le "_" devra également être supprimé car il sera ajouté lorsque la date actuelle sera ajoutée. Pour rappel, si la date n'existe pas, rien n'est supprimé ; elle est simplement transmise à la commande qui ajoute la date (ce que je fais actuellement).
0 votes
C'est un processus assez chirurgical que vous demandez. Et supprimer simplement le nom du fichier et le remplacer par la date n'est pas une option pour vous.
0 votes
Je suppose que j'étais optimiste et que je pensais qu'il pourrait y avoir une déclaration conditionnelle qui dirait quelque chose comme : si x existe, alors faites y + z ; sinon, faites z... où x est quelque chose comme "_181212", y est pour supprimer x et z est pour ajouter la date actuelle. Merci de votre attention.
0 votes
Non, je ne dis pas que ce n'est pas possible, c'est juste que je ne sais pas comment.