Savoir si le fichier a changé
Je veux savoir si un fichier a été modifié depuis la dernière fois que mon script shell a commencé, peut-être par la création d'un booléen ou quelque chose...
Il serait peut-être possible d'enregistrer la dernière fois que le script a été exécuté dans un fichier texte et lorsque le script est lancé, la prochaine fois il faut lire ce fichier et ensuite, il doit trouver ce fichier ont été modifiées afin que je puisse vérifier si un fichier a été modifié en utilisant quelque chose comme:
for file in *
do
#Somecode here
if [ $filehaschanged != "0" ]; then
echo "Foobar" > file.txt
fi
#Somecode here
done
Il serait peut-être possible de le faire avec find
...des idées?
Vérifiez ceci: unix.com/shell-programming-scripting/...
OriginalL'auteur Micheal Perr | 2012-02-26
Vous devez vous connecter pour publier un commentaire.
Michael, par "changé", demandez-vous si le fichier a été touché (c'est à dire datestamp est plus récente), ou demandez-vous si le contenu est différent?
Si l'ancien, vous pouvez le tester avec
find
outest
. Par exemple, dans le shell:Si ce que vous cherchez est un test de contenu, alors votre système d'exploitation comprend probablement quelque chose qui permettra de tester le hash d'un fichier.
Je suis sous FreeBSD. Si vous êtes sous Linux, alors vous avez probablement "md5sum" au lieu de "md5".
Pour mettre cela dans un script, vous aurez besoin de marcher à travers votre liste de fichiers, de stocker leurs empreintes, puis un mécanisme de test de fichiers en cours à l'encontre de leurs stockées les tables de hachage. C'est assez facile de script:
Vous pouvez stocker ce (au lieu de /bin exécuter à l'encontre de tout ce qui est important, peut-être
/
) dans un emplacement prévisible, puis écrire un petit script pour vérifier un fichier avec le hachage:Ce genre de script est ce que les outils comme tripwire fournir.
OriginalL'auteur ghoti
Vous pouvez
touch
tous les fichiers lorsque vous exécutez votre script. Puistouch
le script lui-même.La prochaine fois, vous venez de
find
tous les fichiers qui est plus récente que votre script.touch myscript.sh | touch * | find ???
Ya, c'est une idée intelligente, sauf que dans un système plus vaste raisonnables de sécurité mis en place, l'utilisateur qui exécute un script devrait probablement pas les autorisations pour modifier le script, ou son timestamp. Pour être plus portable/secure sur ce sujet, je voudrais recommander de toucher à un fichier dans /tmp ou /var/tmp qui serait le temps de la comparaison.
Il suffit de mettre la
touch
commande à la fin de votre scriptÀ l'intérieur d'un script,
$0
est le nom du script. Donc, si vous voulez utiliser cette approche, vous pouvez simplement ajoutertouch "$0"
à la fin du script. (Les guillemets sont dans le cas où vous décidez de mettre de drôles de caractères comme des espaces dans votre script du nom de fichier. C'est toujours une bonne idée d'envelopper les variables entre guillemets, à l'intérieur de scripts shell.)OriginalL'auteur kev
kev de la solution en Python, fonctionne si vous avez le droit de toucher le script:
OriginalL'auteur oao