2010-11-11 7 views
3

J'ai écrit un script bash shell dont une partie vérifie si un fichier a plus de 30 jours à l'aide de la commande find, malheureusement quand je l'ai téléchargé sur mon l'hôte n'a pas fonctionné car la commande find est verrouillée.Vérifie si un fichier date de plus de 30 jours SANS la commande find

Est-ce que quelqu'un sait comment vérifier si un fichier a plus de 30 jours SANS la commande find?

Je pense que je dois faire un "ls -a $ filename" puis analyser la chaîne de date, la convertir en une date unix et la comparer avec la date d'aujourd'hui mais je suis très rouillé à unix.

Merci

Répondre

6

stat -c %Z filename donne la dernière fois de changement de unixtime

stat -c %Y filename si vous souhaitez que la dernière date de modification.

+0

Salut merci, je ne savais pas sur cette commande. Devrait-il être -f pour le format comme -c n'est pas une option sur ma machine? –

+0

probablement oui :) – Kimvais

+0

OK et comment comparez-vous cela à la date d'aujourd'hui pour vérifier si> 30 jours? –

0

Laissez ls sortie un horodatage unix, comme ceci:

ls -l --time-style='+%s' 

obtenir ensuite l'horodatage de la sortie, et simlpy calculer s'il y a 30 60 secondes entre l'heure actuelle et l'horodatage à partir de ls.

Vous pouvez obtenir l'horodatage en cours en utilisant

date '+%s'; 
+0

Salut merci mais je ne peux pas obtenir cette commande pour travailler, je reçois "ls: option illégale - -" –

+0

La solution de Sjoerd implique un GNU ls - qui apparemment n'a pas poster. –

2

Vous pouvez utiliser if [ $file -ot $timestamp_file ] (-ot qui signifie "plus que"). Vous auriez à construire le fichier approprié, par exemple avec touch (qui prend des options d'horodatage). S'il s'agit d'une tâche périodique, vous pouvez également créer le fichier d'horodatage pour chaque exécution à utiliser la prochaine fois.

+0

OK merci, savez-vous comment j'obtiendrais la date il y a 30 jours pour que je puisse passer cela dans la commande tactile? –

+1

@The Frog Daddy: 'touch -d" $ (date -d '30 jours) '"30DAYSAGO' –

-1

OK voici comment je l'ai fait à la fin ...

  1. j'ai touché un fichier avec une date d'aujourd'hui - 1 mois.

touch -t "$(date -v -1m +%Y%m%d%H%M)" ${DATEFILE}

  1. a fait un test sur plus que les 2 fichiers.

if [ ${SERVERFILE} -ot ${DATEFILE} ]

Merci tout le monde.

0

qui ne fonctionne pas sous Linux: aucune option -v Date

t=`date +%Y%m%d%H%M` 
let u=$t-1000000 
touch -t "$u" $DATEFILE 
if [ $SERVERFILE -ot $DATEFILE ]; then 
    rm $SERVERFILE 
fi 
+0

" Cela "fait référence à une autre réponse. L'ordre des réponses peut changer, donc cela aurait dû être soumis comme commentaire - bien que vous ne puissiez probablement pas encore commenter. – philant

Questions connexes