Question Comment puis-je créer un script pour placer les fichiers plus anciens que chaque jour dans leur propre dossier?


Je lance un script inutilement complexe qui ressemble à cette commande:

find /home/user/videos/*.avi -mtime +0 -exec mv -f {} "/home/nb/videos/1 day old" \;

Et puis je lance la même commande, mais cette fois, du dossier "1 day old" dans un dossier "2 days old". Et d'autres commandes se répètent jusqu'à 7 jours! Ainsi, chaque jour, les fichiers du dossier précédent "X days old" sont déplacés dans le dossier du jour suivant.

J'essaie essentiellement d'organiser les fichiers automatiquement, en cours d'exécution dans cron, pour déplacer les fichiers plus anciens que X jours dans le bon dossier. C'est inefficace, mais j'ai vraiment besoin de cela. Y a-t-il un moyen plus facile et plus efficace?

Une fois arrivé au dossier de 7 jours, j'ai la dernière commande qui supprime les fichiers de plus de 7 jours de ce dernier dossier.


6
2017-12-10 16:10


origine




Réponses:


J'utilise (pour une situation similaire) une manière non standard: logrotate.

Cela sauvegardera toutes les vidéos dans /home/user/videos au /home/nb/videos/backup/videos.tar fichier (quotidien), puis déplace automatiquement l’ancien tar fichiers à ...1.tar, ...2.tar etc. Les sauvegardes de plus de 7 jours seront supprimées.

J'ai inclus mv /home/user/videos/*.avi /var/tmp conserver une copie des vidéos au cas où quelque chose ne va pas.

Pour activer cette configuration logrotate, ajoutez un fichier similaire à celui-ci. /etc/logrotate.d annuaire:

/home/nb/videos/backup/videos.tar {
  rotate 7
  daily
  notifempty
  nocreate
  nocompress
  missingok

  postrotate
    if ls /home/user/videos/*.avi > /dev/null 2>&1; then
      tar cf /home/nb/videos/backup/videos.tar /home/user/videos/*.avi
      mv /home/user/videos/*.avi /var/tmp
    fi
  endscript
}

Pour plus d'informations, voir man logrotate.


3
2017-12-10 17:31



Merci. Votre idée m'a fait réfléchir. Au lieu de les trier, existe-t-il une commande que je peux utiliser pour mettre tous les fichiers créés à la date de création dans un dossier portant la même date? Et cette commande peut être exécutée comme un travail cron quotidien par exemple. Un moyen de le faire? Et bien sûr, tous les fichiers créés après l'exécution de la commande doivent toujours être placés dans le même dossier si la commande est à nouveau exécutée. - nLinked
C'est certainement possible, mais pas via logrotate, car il ne peut que faire pivoter les fichiers, pas les répertoires. Peut-être que quelqu'un affichera une solution pour ce cas. - arrange