ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, SHells, Move files date YYYYMMDD --> directory YYYY/MM/DD

Déplacer des fichiers de type file-YYYYMMDD.ext vers une directory Year/Month/Day/

Author : O.Romain.Jaillet-ramey

Ayant installer dernièrement le logiciel motion qui permet de capturer (selon votre caméra) des images à la detection de mouvement.

J'ai plusieurs fichiers qui sont stockés automatiquement dans un seul répertoire. Il y a des fichiers vidéos et des fichiers images.

Je souhaite les déplacer dans un répertoire plus approprié et cela avec la date selon cette arborescence /repertoire/par/default/annee/mois/jour/.

Script avec 7 lignes

001ls -l /var/lib/motion/
002total 69792
003-rw-r--r-- 1 root adm   5051616 août   9 18:12 01-20190809180934.avi
004-rw-r--r-- 1 root adm  44925218 août   9 20:38 04-20190809201830.avi
005-rw-r--r-- 1 root adm     33473 août  11 12:40 04-20190811195326-203.jpg
006-rw-r--r-- 1 root adm    31773 août  11 11:48 05-20190809195748-40.jpg
007-rw-r--r-- 1 root adm    232564 août   9 20:40 05-20190809203858.avi
Retirer les numéros de lignes

Je me suis fais un script SHell. Le voici vim /root/motion-check.sh ;)

Script avec 143 lignes

001#!/bin/bash
002
003#--------------------------------------------------------------------
004# Auteur : LAB3W : O.Romain Jaillet-ramey (orj@lab3w.fr)
005#
006# Description : Script pour les contents de motion (camera)
007# Move images et vidéos dans un répertoire selon la date
008#
009# Date Create : 2019-08-11
010# Date Modify : 2019-08-11
011#
012#---------------------------------------------------------------------
013
014#DATE="`date +%Y%m%d%H%M%S`";
015DATE="`date +%Y/%m/%d`";
016#DATE_DAY="`date +%d`";
017
018# ---------------------------------------------------------------------------
019DIR="/var/lib/motion/";
020
021IMG="*.jpg";
022VID="*.avi";
023
024# ---------------------------------------------------------------------------
025
026function description_script() {
027        echo "# ---------------------------------------"
028        echo "# Script pour les contents de motion (camera)"
029        echo "# Description : Move images et vidéos dans un répertoire selon la date"
030        echo "# ----"
031        echo ""
032}
033
034function directory_day() {
035
036        if [ -e ${DIR}${DATE}/ ] && [ -d ${DIR}${DATE}/ ]; then
037
038                echo -e "Le répertoire de la journée ${DIR}${DATE}/ exist !"
039
040        else
041
042                echo -e "On crée le répertoire de la journée ${DIR}${DATE}/"
043                mkdir -p ${DIR}${DATE}/
044
045        fi
046
047        echo ""
048}
049
050function list_videos() {
051
052        echo "Liste des Vidéos";
053        echo ""
054
055        if [ "`ls -l ${DIR}${VID} 2>/dev/null |wc -l`" -ge "1" ]; then
056
057        for i in ${DIR}${VID}; do
058
059                file=`echo $i |cut -d/ -f 5 |
060                awk -F - '{ date_now=substr($(date),7,2); day=substr(,7,2); if (date_now != day)
061                print  "-" ""substr(,1,4) ""substr(,5,2) ""substr(,7,2) ""substr(,9,4) ""substr(,13,2) ""substr(,15,4)}'`;
062
063                file_year="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,1,4) }'`";
064                file_month="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,5,2) }'`";
065                file_day="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,7,2) }'`";
066
067                DIR_4_FILE="${DIR}${file_year}/${file_month}/${file_day}/";
068
069                echo " - On se prépare à déplacer ${DIR}$file vers ${DIR_4_FILE}$file";
070
071                if [ -e ${DIR_4_FILE} ] && [ -d ${DIR_4_FILE} ]; then
072                        echo -e "tLe répertoire ${DIR_4_FILE} exist !";
073                        echo -e "tt+ ${DIR}$file --> ${DIR_4_FILE}$file"
074                        mv ${DIR}$file ${DIR_4_FILE}$file
075                        echo ""
076                else
077                        echo -e "tOn crée le répertoire ${DIR_4_FILE}";
078                        mkdir -p ${DIR_4_FILE}
079                        echo -e "tt+ ${DIR}$file --> ${DIR_4_FILE}$file"
080                        mv ${DIR}$file ${DIR_4_FILE}$file
081                        echo ""
082                fi
083
084        done;
085
086        else
087                echo "- Aucune Vidéo";
088        fi
089
090        echo ""
091
092}
093
094function list_images() {
095
096        echo "Listes des images";
097        echo ""
098
099        if [ "`ls -l ${DIR}${IMG} 2>/dev/null |wc -l`" -ge "1" ]; then
100
101        for i in ${DIR}${IMG}; do
102
103                file=`echo $i |cut -d/ -f 5 |
104                awk -F - '{ date_now=substr($(date),7,2); day=substr(,7,2); if (date_now != day)
105                print  "-" ""substr(,1,4) ""substr(,5,2) ""substr(,7,2) ""substr(,9,4) ""substr(,13,2) "-"}'`;
106
107                file_year="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,1,4) }'`";
108                file_month="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,5,2) }'`";
109                file_day="`echo $i |cut -d/ -f 5 | awk -F - '{ print substr(,7,2) }'`";
110
111                DIR_4_FILE="${DIR}${file_year}/${file_month}/${file_day}/";
112
113                echo " - On se prépare à déplacer ${DIR}$file vers ${DIR_4_FILE}$file";
114
115                if [ -e ${DIR_4_FILE} ] && [ -d ${DIR_4_FILE} ]; then
116                        echo -e "tLe répertoire ${DIR_4_FILE} exist !";
117                        echo -e "tt+ ${DIR}$file --> ${DIR_4_FILE}$file"
118                        mv ${DIR}$file ${DIR_4_FILE}$file
119                        echo ""
120                else
121                        echo -e "tOn crée le répertoire ${DIR_4_FILE}";
122                        mkdir -p ${DIR_4_FILE}
123                        echo -e "tt+ ${DIR}$file --> ${DIR_4_FILE}$file"
124                        mv ${DIR}$file ${DIR_4_FILE}$file
125                        echo ""
126                fi
127        done;
128
129        else
130                echo "- Aucune Image";
131        fi
132
133        echo ""
134}
135
136description_script
137directory_day
138list_images
139list_videos
140
141
142echo "# Fin du script";
143echo "# ---------------------------------------"
Retirer les numéros de lignes

On execute le script de cette manière : /root/motion-check.sh après avoir apliqué les droits d'execution chmod u+x motion-check.sh.

Grâce à ce script j'ai maintenant les vidéos et photos classées par journée. Je m'y retrouve plus facilement ; je peut alors faire des rsync sur un autre serveur etc. On pourait lancer le script tous les jours en fin de journée par tache planifiée ; une crontab ;)


Cordialement, Romain


<< Couper, fractionner une date YYYYMMDD

RaspBerry Pi III - Introduction >>