Retrait des fichiers plus anciens que 1 mois, mais laissez les fichiers créés au 1er jour du mois

J'essaie de supprimer certains fichiers d'archive d'un dossier sur un serveur de fichiers CentOS avec un cronjob. Les exigences:

  1. Supprimer les fichiers du dernier mois
  2. Le fichier .tgz du premier jour du mois doit être laissé intact.

Je sais que je peux supprimer des fichiers plus anciens que x jours avec:

find /path -mtime +30 -exec rm {} \; 

Cependant, cela ne laissera pas seul les archives créées au premier jour du mois. Internet ne semble pas fournir une réponse (pour l'instant).

Première note

Sur les systèmes de fichiers Unix, vous n'avez aucune information sur le temps de création d'un fichier. Ce qui est souvent appelé ctime est le temps de changement d'état d'un fichier. Cela peut être modifié par renommement de fichier ou modifications d'autorisations.

Voir ce lien pour plus d'informations.

Soyez donc averti que la solution suivante pourrait échouer.

Solution à l'aide d' awk

find n'a aucun opérateur pour sélectionner une date spéciale. Donc, l'astuce consiste à créer une sortie avec le jour du mois et le nom du fichier et à l'aide d'un séparateur qui ne fait pas partie des noms de fichiers. Je suppose que # est un tel séparateur distinct.

  find . -mtime +30 -printf "%Cd#%p\n" 

Dans une deuxième étape, vous pouvez filtrer les fichiers indésirables.

  find . -mtime +30 -printf '%Cd#%p\n' |awk -F'#' '$1 !~ /^01/{print $2;}' 

Solution à l'aide de grep et cut

Faire le même tour que ci-dessus.

  find . -mtime +30 -printf '%Cd#%p\n' |grep -v '^01' |cut -d '#' -f 2