Dateien finden die nur chr(0) enthalten

Hallo,

nach einer Kopier-Aktion in Windows gibt es in einem Verzeichnis mit sehr vielen Unterverzeichnissen einige Dateien, die nur mit char(0) gefüllt sind. Sie könnten vom backup restored werden, aber wie finde ich diese Dateien? Ich habe Cygwin, könnte also ein Unix-, ein Perl- oder ein awk-Script laufen lassen. Ich finde aber keine Möglichkeit,
zum Beispiel 65 Char(0)-Zeichen in den grep-Befehl zu packen. Wer weiss Rat?

Danke und Gruss

Rupert

Hallo,

nach einer Kopier-Aktion in Windows gibt es in einem
Verzeichnis mit sehr vielen Unterverzeichnissen einige
Dateien, die nur mit char(0) gefüllt sind. Sie könnten vom
backup restored werden, aber wie finde ich diese Dateien?

Mein Vorschlag: Mit File::Find das ganze Verzeichnis durchlaufen, die Dateien öffnen, einlesen, schauen ob sie auf die regex m/\A\0*\z/ matchen, wenn ja enthalten sie nur 0-bytes.

So könnte das aussehen (ungetestet):

use strict;
use warnings;
use File::Find;
find(\&wanted, "path/to/file");

sub wanted {
 last if -d; # skip directories
 open my $F, ';
 close $F;
 if ($content =~ m/\A\0\*\z/){
 print "Found file '$\_'\n";
 }
}

Das liest jede Datei gleich in den Speicher, was bei sehr großen Dateien sehr langsam sein könnte. Wenn das der Fall ist, müsst du blockweise lesen (z.B. mit $/ = \1024; oder mit read()) und die Blöcke einzeln auf die Regex loslassen.

HTH,
Moritz

HTH - Hi That Helped - many thankx to Moritz - ich kannte das find, aber das mit dem match eben noch nicht - echt genial …