137 votes

Shell script - Obtenir tous les fichiers modifiés après <date>

Je préfère ne pas faire cela en PHP, j'espère donc qu'une personne maîtrisant les scripts shell pourra m'aider.

J'ai besoin d'un script qui parcourt le répertoire récursivement et trouve tous les fichiers dont la date de dernière modification est supérieure à une certaine date. Ensuite, il va tar et zip le ou les fichiers en gardant les informations de chemin.

142voto

skrat Points 2461

Aussi simple que ça :

find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz

donde find . -mtime -1 sélectionnera tous les fichiers du répertoire courant (récursivement) modifiés la veille. vous pouvez utiliser des fractions, par exemple :

find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz

96voto

Jonathan Leffler Points 299946

Si vous avez GNU find alors il y a une légion d'options pertinentes. Le seul hic, c'est que leur interface n'est pas des plus brillantes :

  • -mmin n (temps de modification en minutes)
  • -mtime n (temps de modification en jours)
  • -newer file (heure de modification plus récente que l'heure de modification du fichier)
  • -daystart (ajuster l'heure de départ de l'heure actuelle au début de la journée)
  • Plus des alternatives pour le temps d'accès et le temps de "changement" ou de "création".

La partie la plus difficile est de déterminer le nombre de minutes écoulées depuis un moment donné.

Une option à considérer : utiliser touch pour créer un fichier avec l'horodatage de modification requis ; puis utilisez find con -newer .

touch -t 200901031231.43 /tmp/wotsit
find . -newer /tmp/wotsit -print
rm -f /tmp/wotsit

Cela recherche les fichiers plus récents que 2009-01-03T12:31:43. Clairement, dans un script, /tmp/wotsit serait un nom avec le PID ou une autre valeur pour le rendre unique ; et il y aurait un trap pour s'assurer qu'il est supprimé même si l'utilisateur l'interrompt, et ainsi de suite.

35voto

linux_newbie Points 49

Vous pouvez le faire directement avec le goudron et même mieux :

tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files

Ceci indique à tar de compresser les fichiers plus récents que le 1er janvier 2014, 18:00:00.

17voto

Jason Luther Points 158

Cela fonctionnera pour un certain nombre de fichiers. Vous devez inclure "-print0" et "xargs -0" au cas où les chemins contiennent des espaces. Cet exemple recherche les fichiers modifiés au cours des 7 derniers jours. Pour trouver ceux modifiés avant les 7 derniers jours, utilisez "+7".

find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2

Comme cette page prévient, xargs peut faire en sorte que la commande tar soit exécutée plusieurs fois s'il y a beaucoup d'arguments, et le drapeau "-c" peut causer des problèmes. Dans ce cas, vous voudriez ceci :

find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar

Vous ne pouvez pas mettre à jour une archive tar zippée avec tar, il vous faudrait donc la bzip2 ou la gzip dans une deuxième étape.

12voto

Chris Doggett Points 9987

Cela devrait montrer tous les fichiers modifiés au cours des 7 derniers jours.

find . -type f -mtime -7 -print

Passez le tout dans tar/zip, et vous devriez être prêt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X