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 09/06/2015, à 08:56

Nhadroj

Question sur un script

Bonjour,

Petite question bénigne, j'ai écris un script qui balaye l'ensemble d'un répertoire et ses sous-répertoire pour lister les fichiers plus vieux de 45 jours.
Pouvez-vous me dire s'il est possible que ce script supprime par inadvertance des fichiers ? Je ne pense pas mais je préfère demander à une communauté expérimentée.

Merci d'avance, voici le script :

#! /bin/bash
IFS=''

find /volume1/ -type f | grep -v "@appstore" | grep -v "@autoupdate" | grep -v "@database" | grep -v "@eaDir" | \
grep -v "@httpd.core" | grep -v "@spool" | grep -v "@tmp" | grep -v "aquota.group" | grep -v "aquota.user" | \
grep -v "lost+found" | sed -e 's/\\/\\\\/g' | sed -e 's/ /\\ /g' > resultat_find

while read ligne; do
        date_fichier=$(stat $ligne | tail -3 | head -1 | cut -c 9-27);
        timestamp_fichier=$(date -d $date_fichier +%s);
        timestamp_actuel=$(date +%s);
        user=$(stat $ligne | head -4 | tail -1 | cut -d"/" -f3 | cut -d")" -f1 | sed -e 's/ //g');
        let "dif_timestamp=$timestamp_actuel-$timestamp_fichier"
        let "dif_jour=$dif_timestamp/86400"
        if [ $dif_timestamp -gt 3888000 ]; then
        	echo $ligne";"$user";"$dif_jour;
        fi
done < resultat_find | sed -e 's/\\/\\\\/g' | sed -e 's/ /\\ /g' > tab.csv
while read ligne; do
	chemin=$(echo $ligne | cut -d";" -f1 | sed -e 's/\\/\\\\/g' | sed -e 's/ /\\ /g');
	#action à effectuer sur le fichier
done < tab.csv

Hors ligne

#2 Le 09/06/2015, à 09:25

pingouinux

Re : Question sur un script

Bonjour,
Ton script va écraser, s'ils existent déjà, les fichiers resultat_find et tab.csv dans le répertoire courant.
Sinon, pour trouver les fichiers modifiés depuis plus de 45 jours :

find /volume1/ -type f -mtime +45

Hors ligne

#3 Le 09/06/2015, à 09:35

Nhadroj

Re : Question sur un script

Oui c'est exact pour les fichiers resultat_find et tab.csv, mais ceux la m'importent peu.
Juste, j'avais essayé en premier cette ligne de code mais ça ne va pas. Je travail sur un NAS Synology et la date de modification retourné avec mtime +45 retourne une mauvaise date, qui remonte pour certains fichier jusqu'à 2004 alors qu'ils ont été modifiés la semaine dernière. Problème de date Windows à mon avis au moment du dépôt du fichier sur le NAS.
C'est pour cela que je passe par stat et que je découpe la bonne date ^^

En tout cas aucun fichier de /volume1/ ne peut être supprimé avec ce script c'est le principal, merci smile

Hors ligne

#4 Le 09/06/2015, à 10:14

pingouinux

Re : Question sur un script

Jette un œil à man stat. Tu peux utiliser l'option -c (ou --format) pour filtrer la sortie de la commande. Par exemple

stat -c "%Y" fichier

va te donner la date de dernière modification du fichier en secondes.

Hors ligne

#5 Le 09/06/2015, à 10:21

Nhadroj

Re : Question sur un script

Sur les NAS Synology, c'est du linux de base réduit, il n'y a même pas de man -_- et pas beaucoup d'options sur les commandes, pour ça que je découpe avec mes tail head et autres..
Mais merci je ne connaissais pas smile

Hors ligne