GNU/Linux >> Tutoriels Linux >  >> Linux

Recherche et suppression de fichiers avec une date spécifique

Vous pouvez utiliser find . Calculez la date en fonction de vos besoins et de votre utilisation,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print

Après confirmation, supprimez-les,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete

Pour commencer, trouver les fichiers créés sur un certain temps est un peu difficile, car le temps de création n'est généralement enregistré nulle part ou est difficile à obtenir. Ce que vous avez est mtime , soit l'heure de la dernière modification, et ctime qui est l'heure de "changement", mise à jour sur toute modification de l'inode. Je suppose que vous voulez l'heure de modification.

Retrouver des fichiers modifiés à une date donnée s'est avéré peu intéressant, puisque find semble rendre un peu difficile de bien faire les choses avec des fichiers créés exactement à minuit.

Si nous connaissons l'heure relative (c'est-à-dire que c'était hier), nous pourrions utiliser find -daystart -mtime 1 , mais il trouve le fichier modifié au mauvais minuit, Aug 8 00:00 . Cependant, cela semble fonctionner :

find dir/ -daystart -mtime +0 \! -mtime +1 -ls

Si vous ne voulez pas calculer le temps relatif, et votre find a -newerXY :

find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls

Encore une fois, cela donne tort aux fichiers créés exactement à minuit, car la comparaison est "plus récente", et non "plus récente ou aussi ancienne que". Bien que si votre système a une précision inférieure à la seconde pour les horodatages, il peut être difficile d'y parvenir, mais cela se produit si vous testez avec des fichiers créés par touch ...

Une solution de contournement velue à cela serait quelque chose comme ceci :

find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls

Dans tous les cas, ajoutez le -name "DBG_A_sql*" nécessaire pour ne prendre que les fichiers avec le nom correct. Vous pouvez remplacer le -ls à la fin avec -delete pour supprimer les fichiers au lieu de les lister. (-ls , -delete et -newerXY existent au moins dans GNU find et BSD find sur OS X.)

Bien sûr, vous pouvez réellement analyser la représentation textuelle de la date, mais ls il est difficile d'avoir raison si un joker crée des fichiers contenant des caractères non imprimables. Bien sûr, les fichiers d'exemple n'en ont pas, mais en général, n'importe qui peut les créer, surtout en /tmp .

(Mais avec | xargs rm vous manqueriez ces fichiers, et comme les noms de fichiers ne peuvent pas contenir de barres obliques, il serait difficile pour quiconque de pointer votre rm vers un autre répertoire.)


Juste une boucle bash

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done

Linux
  1. Obtenir tous les fichiers qui ont été modifiés à une date précise ?

  2. Comment obtenir uniquement les fichiers créés après une date avec Ls ?

  3. Rechercher et copier des fichiers

  4. Trouvez des fichiers et tarez-les (avec des espaces)

  5. rechercher et supprimer des fichiers avec de l'espace à l'aide de la commande find sous Linux

Comment trouver une chaîne ou un mot spécifique dans les fichiers et les répertoires

Rechercher la commande sous Linux (Rechercher des fichiers et des répertoires)

Comment rechercher et répertorier récursivement les fichiers par date sous Linux

Retrouver les fichiers perdus avec Scalpel

Comment trouver des fichiers volumineux Linux avec les commandes find et du

Trouvez facilement des fichiers et des répertoires sur Linux