Un programme génère des fichiers texte en sortie, nommés output.txt
, après chaque 15ème itération d'un processus donné. Ce faisant, il écrase le dernier output.txt
. Je souhaite cependant conserver les fichiers et je ne peux pas modifier le nom du fichier dans le programme.
Puis-je exécuter un script, avec le programme, qui surveille le répertoire de sortie, déplace et renomme les fichiers output.txt
dans un autre répertoire?
Commencez par installer le paquet inotify-tools
:
Sudo apt-get install inotify-tools
Un script bash aiderait
#! /bin/bash
folder=~/Desktop/abc
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' $folder | while read file
do
mv ~/Desktop/abc/output.txt ~/Desktop/Old_abc/${cdate}-output.txt
done
Que signifie ce script:
Ceci surveillera le dossier ~/Desktop/abc
ainsi chaque fois qu’un fichier créé à l’intérieur du fichier sera nommé output.txt
dans un répertoire ~/Desktop/Old_abc
et renommé en fournissant un suffixe de date et d’heure du nouveau fichier, ceci pour être sûr de ne pas écrasez les anciens fichiers et vous pourrez ainsi savoir que ce fichier a été créé à quelle heure et à quelle date
Le script ci-dessous déplacera et renommera tout fichier pouvant apparaître dans un répertoire défini (dr1
). Il renomme les fichiers tels que: output_1.txt
, output_2.txt` etc. Le script a une apparence "active" si le nom ciblé existe déjà dans le répertoire 2 (et non dans une plage choisie "à l'aveuglette"). Vous pouvez ainsi démarrer et arrêter le script à tout moment. temps sans risque de remplacer les fichiers existants.
Etant donné qu’il attribue aux fichiers de sortie un nom unique et, par définition, ne remplace pas les fichiers existants, le répertoire ciblé peut est identique au répertoire source.
rename_save.py
Exécutez-le à l'aide de la commande:
python3 /path/to/rename_save.py
pendant que l'autre script (itération) est en cours d'exécution
#!/usr/bin/env python3
import shutil
import os
import time
#--- set the time interval to check for new files (in seconds) below
# this interval should be smaller than the interval new files appear!
t = 1
#--- set the source directory (dr1) and target directory (dr2)
dr1 = "/path/to/source_directory"
dr2 = "/path/to/target_directory"
name = "output_"; extension = ".txt"
newname = lambda n: dr2+"/"+name+str(n)+extension
while True:
newfiles = os.listdir(dr1)
for file in newfiles:
source = dr1+"/"+file
n = 1; target = newname(n)
while os.path.exists(target):
n = n+1; target = newname(n)
shutil.move(source, target)
time.sleep(t)
Installez le paquet inoticoming
Sudo apt-get install inoticoming
Créer un script wrapper watch_output
:
#!/bin/bash
backup_folder="$HOME/backups"
filename="$1"
mkdir -p "$backup_folder"
if [ "$filename" == "output.txt" ]
then
echo "New or changed file \"output.txt\" in $2"
mv "$2/$filename" "$backup_folder/${filename%.*}.$(date +'%Y-%m-%d_%H:%M:%S').${filename##*.}"
fi
Rendez-le exécutable:
chmod +x <full_path_of_watch_output_script>
Regardez votre dossier de sortie:
inoticoming "$HOME/output" <full_path_of_watch_output_script> {} "$HOME/output" \;
Exemple:
$ killall inoticoming
$ inoticoming "$HOME/output" ./watch_output {} "$HOME/output" \;
$ touch $HOME/output/output.txt
$ ls -log $HOME/backups
total 0
-rw-rw-r-- 1 0 Mai 13 14:32 output.2015-05-13_14:32:10.txt