Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

Hors 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 big_smile
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.

Hors 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é) big_smile

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.

Hors 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