Je préfère ne pas faire cela en PHP, donc j'espère qu'une personne décente au script shell pourra vous aider.
J'ai besoin d'un script qui parcourt le répertoire de manière récursive et trouve tous les fichiers dont la dernière date de modification est supérieure à une certaine date. Ensuite, il tarera et compressera le (s) fichier (s) en conservant les informations de chemin.
Réponses:
aussi simple que:
où
find . -mtime -1
sélectionnera tous les fichiers dans le répertoire courant (récursivement) modifié la veille. vous pouvez utiliser des fractions, par exemple:la source
-newermt
est beaucoup plus agréable.-type f
pour sélectionner uniquement les fichiers. Cela maintient la structure des dossiers, mais ne sauvegarde que les fichiers avec les modifications.Si vous avez GNU
find
, alors il existe une légion d'options pertinentes. Le seul hic, c'est que l'interface avec eux est moins que stellaire:-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ébut de l'heure actuelle au début de la journée)Le plus difficile est de déterminer le nombre de minutes depuis un moment.
Une option à considérer: utiliser
touch
pour créer un fichier avec l'horodatage de modification requis; puis utilisezfind
avec-newer
.Cela recherche les fichiers plus récents que 2009-01-03T12: 31: 43. Clairement, dans un script, il y
/tmp/wotsit
aurait un nom avec le PID ou une autre valeur pour le rendre unique; et il y aurait untrap
pour s'assurer qu'il est supprimé même si l'utilisateur interrompt, et ainsi de suite.la source
-newermt '2009-01-03T12:31:43'
pour éviter d'avoir à créer un fichier juste pour référence.-newermt
(documenté sous-newerXY
car il y a plusieurs options; X = m, Y = t dans ce cas). La découverte GNU sur les systèmes Linux (presque archaïques) que j'utilise ne supporte pas les options, c'est donc une arrivée relativement récente. Merci pour l'information.-newermt '-2 weeks'
.-newermt '2009-01-03T12:31:43'
semble génial, mais malheureusement, il semble tout interpréter dans le mauvais fuseau horaire: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlVous pouvez le faire directement avec tar et encore mieux:
Cela demande à tar de compresser les fichiers plus récents que le 1er janvier 2014, 18:00:00.
la source
tar
qui viennent avec OS X et FreeBSD ne prennent en charge--newer
que la longue option pour-N
GNUtar
.Cela fonctionnera pour un certain nombre de fichiers. Vous voulez inclure "-print0" et "xargs -0" au cas où l'un des chemins contiendrait 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".
Comme cette page l' avertit, xargs peut provoquer l'exécution de la commande tar plusieurs fois s'il y a beaucoup d'arguments, et l'indicateur "-c" peut causer des problèmes. Dans ce cas, vous voudriez ceci:
Vous ne pouvez pas mettre à jour une archive tar compressée avec tar, vous devrez donc bzip2 ou gzip dans un second temps.
la source
-type f
pour sélectionner uniquement les fichiers. Cela maintient la structure des dossiers, mais ne sauvegarde que les fichiers avec des modifications / ajoutées récemment.Cela devrait afficher tous les fichiers modifiés au cours des 7 derniers jours.
Transformez cela en tar / zip, et vous devriez être bon.
la source
Je ferais simplement ce qui suit pour sauvegarder tous les nouveaux fichiers d'il y a 7 jours
notez que vous pouvez également remplacer «il y a 7 jours» par tout ce qui correspond à vos besoins
Peut être :
date -d'yesterday' +"%d-%b"
Ou même :
date -d'first Sunday last month' +"%d-%b"
la source
bien sous Linux, essayez de lire la page de manuel de la commande find
quelque chose comme ça devrait
et tu l'as
la source
Vous pouvez obtenir une liste des fichiers modifiés pour la dernière fois il y a x jours avec:
Ensuite, il vous suffit de tarer et de compresser les fichiers dans la liste résultante, par exemple:
pour tous les fichiers modifiés le mois dernier.
la source
Ce script trouvera les fichiers ayant une date de modification de deux minutes avant et après la date donnée (et vous pouvez modifier les valeurs dans les conditions selon vos besoins)
Par exemple , vous voulez que les fichiers ayant la date de modification avant la seule date donnée, vous pouvez changer
120
pour0
en$DIFF_IN_DATE
paramètre rejeter les conditions de$DIFF_IN_DATE1
paramètre.De même, si vous voulez que les fichiers aient une date de modification 1 heure avant et après la date donnée, remplacez simplement
120
par3600
inif CONDITION
.la source