#1 Le 18/08/2017, à 23:32
- Fan-de-pandas
[Résolu]Ajouter date du jour en suffixe
Bonjour à tous,
Je souhaite obtenir un petit coup de main pour écrire un script bash me permettant de ranger mes fichiers en fonction de leur extension vers le répertoire adéquat (l'équivalent du Plasmoïd Magic Folder sur KDE 4), indisponible sur Plasma 5.
https://store.kde.org/content/show.php/ … ent=100348
En somme, déplacer automatiquement :
/Home/user/Bordel/Document.pdf
/Home/user/Bordel/Lol.jpg
...
Vers :
/Home/user/Trié/Pdf/Document.pdf
/Home/user/Trié/Jpg/Lol.jpg
…
Pour l’instant, j’ai le code suivant (je le note à toutes fins utiles mais si vous souhaitez repartir sur une base neuve, je suis ouvert).
#!/bin/bash
#Choisir le dossier à trier
cd /home/user/Bordel/
#Choisir tous les fichiers txt
for i in *.txt
#Déplacer les fichiers txt vers le dossier adéquat
do mv *.$txt /home/user/Trié/Txt
#Fin du script
fi ;
#Afficher que le script est terminé
echo "Terminé"
Le problème est que ce code « overwrite » mes fichiers. Si il y a déjà un « Document.pdf », il passe à la trappe et est remplacé d’office par le plus récent, chose que je ne souhaite pas.
J’envisage donc d’intégrer à la première partie du script une ligne permettant d’intégrer au nom du document sa date de création.
Il ne manque que votre patte pour m’aider à faire passer :
« Document.pdf »
«Kate.txt »
à
« Document (19-08-17).pdf »
« Kate (19-08-17).txt »
Ou mieux encore, incrémenter un numéro en fonction du répertoire de destination (Si, le Français est ma langue maternelle. Pourquoi vous me demandez?)
Si le dossier "Home/user/Rangé/PDF" contient « Document.pdf », "Document 1.pdf", "Document 2.pdf", "Document 3.pdf", il faudrait que le fichier à déplacer devienne "Document 4.pdf".
Equivalent du "Le dossier existe déjà", "Suggérer un nouveau nom" (cocher la case "Appliquer à tous) sur KDE.
Merci d’avance à tous ceux susceptibles de pouvoir m’aider et à tous ceux qui ne pourront pas m’aider mais auront eu la patience de me lire jusqu’au bout.
Bonne journée.
Dernière modification par Fan-de-pandas (Le 20/08/2017, à 12:59)
Hors ligne
#2 Le 19/08/2017, à 05:27
- pingouinux
Re : [Résolu]Ajouter date du jour en suffixe
Bonjour,
Tu peux déjà utiliser mv -i, qui te demandera avant d'écraser un fichier existant.
Voici un premier jet, qui n'incrémente pas les numéros, mais n'écrase rien :
shopt -s nullglob # Pour ne pas avoir d'erreur si aucun fichier .txt (ou .pdf) n'existe
mv -i *.txt /home/user/Trié/Txt/
mv -i *.pdf /home/user/Trié/Pdf/
Hors ligne
#3 Le 19/08/2017, à 05:51
- Watael
Re : [Résolu]Ajouter date du jour en suffixe
salut,
pas testé :
#!/bin/bash
shopt -s nullglob
src=/home/user/Bordel
dst=/home/user/TriE
date=$(date +%F)
for f in "$src/"*
do
if test -f "$f"
then
ext="${f##*.}"
if test "$f" != "$ext"
then
test -d "$dst/$ext" || mkdir "$dst/$ext"
test -f "$dst/$ext/${f##*/}" && echo mv "$f" "$dst/$ext/${f}_$date" || echo mv "$f" "$dst/$ext/"
fi
fi
done
comme tu le vois, il y a quelques vérifications à effectuer.
il faudrait ajouter une action si le "$f" = "$ext" (c'est-à-dire, si le fichier n'a pas d'extension), par exemple créer un répertoire "sansExt", et y déplacer le fichier...
si tu veux aller dans les sous-répertoires de "$src" :
shopt -s nullglob globstar
for f in "$src/"**/*
do...
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#4 Le 19/08/2017, à 09:34
- kholo
Re : [Résolu]Ajouter date du jour en suffixe
salut,
j'ai fait un script pour ça dernièrement et tu peux aussi t'inspirer du dossier magique
[TUTO Bash] rangement automatique fichiers par extension... type mime en cas de manque d'extension (à ajouter routine pour ajouter extension à certains fichiers)
et
dossier magique dans la doc
dossier magique sur le forum
Hors ligne
#5 Le 19/08/2017, à 16:23
- Fan-de-pandas
Re : [Résolu]Ajouter date du jour en suffixe
@Pingouinux : Le -i est un bon début, effectivement, ça limite la casse. On peut choisir l'option "n" par défaut qui s'appliquerait constamment à tous les fichiers?
@Watael : En l'état, le script ne fonctionne pas.
-Les dossiers de destination sont parfaitement créés (je n'en espérais même pas tant)
mais
-Les fichiers ne sont pas copiés et restent dans le répertoire initial
-La date n'est pas ajoutée au fichier
En bidouillant tant bien que mal, j'ai réussi à isoler le code suivant :
#!/bin/bash
shopt -s nullglob
src=/home/user/Bordel
date=$(date +%F)
for fichier in "$src/"*
do mv "$fichier" "${fichier}_$date"
done
Qui semble parfaitement faire l'affaire sauf que :
"Test.pdf"
devient
"Test.pdf_2017-08-19"
Alors qu'idéalement, il devrait devenir
"Test_2017-08-19.pdf"
Impossible de refaire passer l'extension derrière la date, je ne comprends pas la structure du code
@kholo : Si ton programme fonctionne et qu'il n'overwrite pas (je vais tester dans trois heures car j'ai encore quelques obligations dans l'immédiat), je crois que c'est le truc que j'aurai aimé avoir avant hier
Par contre, même commenté, le code fait vraiment usine à gaz pour un novice.
J'étais tombé sur le "dossier magique" il y a quelques jours, lu les 9 pages du forum qui lui sont consacrés à la recherche de l'option permettant de ne pas overwriter les fichiers, en vain.
Hors ligne
#6 Le 19/08/2017, à 16:37
- Watael
Re : [Résolu]Ajouter date du jour en suffixe
mv "$f" "$dst/$ext/${f%.*}_$date.$ext"
?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 19/08/2017, à 17:19
- Fan-de-pandas
Re : [Résolu]Ajouter date du jour en suffixe
Aucune copie
Par contre on se rapproche après modif :
shopt -s nullglob
src=/home/user/Tri
date=$(date +%F)
for f in "$src/"*
do mv "$f" "${f%.*}_$date.$ext"
done
calc.ods
devient
calc_2017-08-19.
Manque plus qu'à rajouter l'extension d'origine à la fin.
Hors ligne
#8 Le 19/08/2017, à 17:34
- Fan-de-pandas
Re : [Résolu]Ajouter date du jour en suffixe
@Watael : J'ai relu ta première réponse, l'extension c'est ".${f##*.}"
Du coup, ça fonctionne (en attendant que tout soit imbriqué)
Hors ligne
#9 Le 19/08/2017, à 18:04
- Watael
Re : [Résolu]Ajouter date du jour en suffixe
dans ma première réponse, l'extension est dans $ext.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 20/08/2017, à 12:59
- Fan-de-pandas
Re : [Résolu]Ajouter date du jour en suffixe
Ca marche parfaitement, merci à tous pour vos contributions et plus spécifiquement à Watael pour sa patience!:D
Hors ligne