Script shell de tri automatique de répertoire

Fermé
alansan2019 Messages postés 1 Date d'inscription lundi 16 mai 2022 Statut Membre Dernière intervention 16 mai 2022 - Modifié le 30 mai 2022 à 22:43
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 30 mai 2022 à 22:48
Bonjour,

Je gère mes caméras de surveillance avec
motion
.
motion
enregistre les vidéos à la racine dans
/motion/
. J'ai déjà un script qui déplace les vidéos motion du jour dans un répertoire nommé à la date du jour, créé automatiquement si ce dernier n'existe pas encore...

Exemple : (on est le 16/05/2022)

/motion/
vid1.mp4
vid2.mp4 ...etc


....devient avec exécution du script (**) :

/motion/
2022-05-16/
vid1.mp4
vid2.mp4 ....etc


dans 3 jours, je serais dans la situation suivante:

/motion/
2022-05-16/*.mp4
2022-05-17/*.mp4
2022-05-18 .... etc


(*) j'aurais besoin (suis novice complet) d'un script qui déplace automatiquement les répertoires des jours (2022-05-xx*) vers un répertoire du mois courant , créé automatiquement si absent:

/motion/
2022-05-16
2022-05-17
2022-05-18 .... etc


....deviendrait:

/motion/
2022-05/
2022-05-16
2022-05-17
2022-05-18 .... etc
2022-06/
2022-06-05
2022-06-06
2022-06-07 .... etc


Voici le script qui trie les vidéos du jour dans un répertoire du jour :

#!/bin/bash

cd /home/xxx/motion/

pwd=`pwd`
#list all files,cut date, remove duplicate, already sorted by ls.

dates=`ls  -l --time-style=long-iso|grep -e  '^-.*' | awk '{print $6}' | uniq`

#for loop to find all files modified on each unique date and copy them to your pwd

for date in $dates; do
    if [ ! -d "$date" ]; then
        mkdir "$date"
    fi

#find command will find all files modified  at particular dates and ignore hidden files.

    forward_date=`date -d  "$date + 1 day" +%F`
    find "$pwd" -maxdepth 1 -not -path '*/\.*' -type f  -newermt "$date" ! -newermt "$forward_date" -exec mv -f {} "$pwd/$date" \;
done


Je ne vois pas comment adapter ce script pour mon besoin spécifique ici (*)

Merci de votre aide
alansan2019
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 30 mai 2022 à 22:49
Bonjour,

Il faut l13-15 extraire l'année, le mois et le jour, puis créer en conséquence le sous dossier.

yyyy=$(echo $date | cut -d"-" -f1)
mm=$(echo $date | cut -d"-" -f2)
dd=$(echo $date | cut -d"-" -f3)
echo "yyyy='$yyyy'"
echo "mm='$mm"
echo "dd='$dd'"
dir="$yyyy-$mm/$yyyy-$mm-$dd"
echo "dir='$dir''"
mkdir -p "$dir"


Ensuite il faut adapter l20 ta commande
mv
pour déplacer ton fichier vers
"$dir"
au lieu de
"$pwd/$date"
.

Bonne chance
0