Dateien von gestern bestimmen und zippen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Dateien von gestern bestimmen und zippen

Beitrag von Duff » 09.12.2006 08:04:40

Hallo,

ich will ein kleines Skript schreiben (shell oder perl) mit dem ich in einem bestimmten Verzeichnis alle Dateien vom gestriegen Tag zippen kann.

Habe das ganze mal versucht mit find und -mtime zu lösen, doch leider finde ich so auch immer Dateien, die noch älter sind.

Hat jemand eine gute Idee?

Das Skript soll nichts großes werden und ist nur für verübergehend gedacht.

Danke!
Oh, yeah!

Benutzeravatar
H4kk3r
Beiträge: 724
Registriert: 02.01.2006 16:50:51
Wohnort: in der Nähe von Heidelberg

Beitrag von H4kk3r » 09.12.2006 08:36:18

Code: Alles auswählen

find . -ctime 1
Gruß, Marcus

„Well done! We did it!“

Debian testing
kernel 2.6.18.3
IBM R50e UR0S5GE

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 09.12.2006 12:40:45

Danke für die Antwort, aber das funktioniert leider auch nicht.

Wenn ich nämlich z.B. noch ein |xargs ls -l ans find hänge, sehe ich, dass die Dateien von vorgestern und älter sind.

Ich hätte aber gerne nur die von gestern.
Oh, yeah!

Benutzeravatar
H4kk3r
Beiträge: 724
Registriert: 02.01.2006 16:50:51
Wohnort: in der Nähe von Heidelberg

Beitrag von H4kk3r » 09.12.2006 13:21:43

Man muss Ordner ausschließen. Denn wenn sich nur eine Datei darin geändert hat, ist der Ordner dabei.

Code: Alles auswählen

find . -mtime 1 -type f
Je nachdem, was du haben willst, auch ctime oder atime.
Gruß, Marcus

„Well done! We did it!“

Debian testing
kernel 2.6.18.3
IBM R50e UR0S5GE

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 09.12.2006 14:41:55

Danke, dass sieht schon besser aus.

Nun finde ich Dateien vom 8 Dec und auch welche vom 7 Dec. Die vom 7 Dec sind aber nicht jünger als 21:01. Die jüngeren Dateien vom z.B. 7 Dec werden nun nicht mehr angezeigt.

Finde ich denn nun so auch um 01:00 Uhr nachts, am 10.12.2006 auch Dateien von 23:59 (vom 09.12.2006)?

Weil genau solche Dateien möchte ich so erfassen.
Oh, yeah!

ToPeG
Beiträge: 437
Registriert: 14.04.2004 00:42:06

Beitrag von ToPeG » 09.12.2006 16:20:50

Hier hast du ein kleines Perlscript das genau das macht. Ich nutze zum Finden das Modul "File::Find" wenn du willst kannst du das natürlich auch anders lösen.

Code: Alles auswählen

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;

sub usage($)
{
 print <<TPG;
ANWENUNG:
 $0 von bis /pfad/zum/suchen
 Beispiel:
  $0 0 1 /home
  Sucht von Mitternacht heute
  bis Mitternacht gestern\n
TPG
die($_[0]."\n");
}

usage('') if(grep{$_=~/^-h/}@ARGV);
my $tag_a=int(shift(@ARGV));
my $tag_b=int(shift(@ARGV));
usage('Falsche Tagangaben!') if($tag_a >= $tag_b && $tag_a <= 0);
usage('Kein Pfad angeben!') unless(@ARGV);
usage('Ein Pfad existiert nicht!') unless(@ARGV==grep{-d $_}@ARGV);
my @quelldirs=@ARGV;

my @dateiliste=();
my $now=time();
my @lnun=localtime();
my $von_mnacht=$lnun[0]+($lnun[1]+($lnun[2]+$tag_a*24)*60)*60; # Sekunden;
my $bis_mnacht=$von_mnacht+$tag_b*24*60*60; # Sekunden;

sub wanted
{
 my $pfad=$File::Find::name;
 unless(-d $pfad)
 {
  my $mtime=-M $pfad;
  if($mtime)
  {
   $mtime*=24*60*60;
   push(@dateiliste,$pfad)if($mtime>=$von_mnacht && $mtime<=$bis_mnacht);
  }
 }
}
find(\&wanted, @quelldirs);

print join("\n",grep{$_=localtime($now-(-M $_)*24*60*60).",  $_"}sort{-M $b <=> -M $a}@dateiliste)."\n";

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 09.12.2006 20:24:39

Wow, danke.

Direkt ein ganzes Skript.
Oh, yeah!

Antworten