Leser: 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#!/usr/bin/env perl use warnings; use strict; use File::Copy; use File::Find; my $dir = '/home/oo/bin'; find( \&wanted, $dir ); sub wanted { return if /^\./; return if -d; if ( -e and -f ) { my $file = $_; my $temp = 'temp_file'; open my $out, '>', $temp or die $!; open my $in, '<', $file or die $!; while ( defined( my $row = <$in> ) ) { $row =~ s|^#!/usr/bin/perl|#!/usr/bin/env perl|; print $out $row; } close $in or die $!; close $out or die $!; move $temp, $file; chmod 0755, $file or die $!; } }
Guest GastBringen die Zeilen etwas?
2010-02-09T17:13:57 reneeIch würde nicht auf $_ überprüfen, sondern auf $File::Find::name. In $_ steht ja nur der Dateiname (ohne den Pfad).
2010-02-09T17:26:00 reneeDie Filetests können auch mit relativen Pfaden umgehen. Nur hier ist es so: Man befindet sich bsp. in /home/ich, macht ein perl skript.pl. Das ist das oben gezeigte Programm. In /home/oo/bin gibt es die Datei "hallo.txt". In der wanted ist in $_ also "hallo.txt". Ein -f $_ würde also überprüfen, ob in /home/ich eine Datei namens "hallo.txt" existiert. Was nicht gewollt ist.
File::Find[...]You are chdir()'d to $File::Find::dir when the function is called, unless "no_chdir" was specified. [...]
Guest GastHallo!
Habe ich alles richtig gemacht?
Bringen die Zeilen etwas?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/env perl use warnings; use strict; use File::Copy; use File::Find; my $dir = '/home/oo/bin'; find( \&wanted, $dir ); sub wanted { my $file = $File::Find::name; if ( -e $file and -f $file ) { my $temp = 'temp_file'; open my $out, '>', $temp or die $!; open my $in, '<', $file or die $!; while ( defined( my $row = <$in> ) ) { $row =~ s|^#!/usr/bin/perl|#!/usr/bin/env perl|; print $out $row; } close $in or die $!; close $out or die $!; move $temp, $file or die $!; chmod 0755, $file or die $!; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/env perl use warnings; use strict; use File::Copy; use File::Find; my $dir = '/home/oo/bin'; find( \&wanted, $dir ); sub wanted { my $file = $File::Find::name; if ( -f $file and ! -l $file ) { my $temp = 'temp_file'; open my $out, '>', $temp or die $!; open my $in, '<', $file or die $!; while ( defined( my $row = <$in> ) ) { $row =~ s|^#!/usr/bin/perl|#!/usr/bin/env perl|; print $out $row; } close $in or die $!; close $out or die $!; move $temp, $file or die $!; chmod 0755, $file or die $!; } }