opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if ($file !~ /\.txt$/i);
my $mtime = (stat($file))[9];
print $mtime;
print "\n";
}
In sostanza, voglio prendere nota del timestamp di tutti i file txt in una directory. Se c'è una sottodirectory, voglio includere anche i file in quella sottodirectory.Come attraversare tutti i file in una directory; se ha sottodirectory, voglio attraversare i file anche nelle sottodirectory
Qualcuno può aiutarmi a modificare il codice sopra in modo che includa anche sottodirectory.
se sto usando il codice qui sotto in Windows iam ottenendo timestamp di tutti i file che si trovano in cartelle anche fuori dalla mia cartella
my @dirs = ("C:\\Users\\peter\\Desktop\\folder");
my %seen;
while (my $pwd = shift @dirs) {
opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
#print @files;
foreach my $file (@files) {
if (-d $file and !$seen{$file}) {
$seen{$file} = 1;
push @dirs, "$pwd/$file";
}
next if ($file !~ /\.txt$/i);
my $mtime = (stat("$pwd\$file"))[9];
print "$pwd $file $mtime";
print "\n";
}
}
Il vecchio modo robusto ... ben fatto senza ricorsione =) – Ouki
'$ file! ~ /^\.*$/' è '$ file = ~ /[^.]/'. Ma sono stato severamente rimproverato in passato per escludere i nomi che sono solo tre punti o più, in quanto sono nomi validi per i file Linux. Quindi il test * dovrebbe * essere '$ file! ~ /^\.\.?$/' – Borodin
@perreal se voglio aprire file e cercare una stringa particolare nel file e separare tali file, sto pensando di farlo con OPEN INPUT, $ file, poi $ lines = quindi seraching su di esso, va bene? o c'è un altro modo semplice – Peter