mv: Aufruf von stat für ,,/home/mldonkey/incoming/irgendeinedatei" nicht möglich: Datei oder Verzeichnis nicht gefunden
Das script sieht folgendermassen aus und soll die dateien den endungen entsprechend in die einzelnden Verzeichnisse verschieben.
Was mache ich falsch? Ich finde partout den Fehler einfach nicht.
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use File::Basename;
# file_completed_cmd interface
my ($hash, $size, $file) = @ARGV;
exit if !$hash || !$size || !$file;
my $incoming='/home/mldonkey/incoming';
my $minfreekb=1024;
# Define extensions here !!!
my %dispatch = (
# video
'.avi .mpg .mpeg .wmv .divx .asf' => '/home/mldonkey/share/videos',
# image
'.iso .bin .cue' => '/home/mldonkey/share/images/',
# soft
'.sh .exe .gz .bz2 .tar .tgz .rpm .deb' => '/home/mldonkey/share/software/',
# audio
'.mp3 .wma .ogg .mod .xm' => '/home/mldonkey/share/musik/',
# bilder
'.jpg .bmp .gif .tif .JPG .BMP .GIF .TIF' => '/home/mldonkey/share/bilder/',
);
my $sizekb=($size+1023)/1024;
my $requiredkb=$sizekb+$minfreekb;
sub enough_space {
my ($dir) = @_;
my $dirfreekb = -1;
if(open(DF, "df -k $dir|")) {
my $headers = <DF>;
my $line = <DF>; chomp $line;
close DF;
$dirfreekb = ( split(/[ \t]+/, $line) )[3] if defined $line;
}
$dirfreekb >= $requiredkb;
}
sub move_if_ok {
my ($file, $dir) = @_;
enough_space($dir) && system ('mv', $file, $dir) == 0
}
my $ext = (fileparse($file, '\.[^.]+$'))[2];
while(my ($exts, $extdir) = each %dispatch) {
my @exts = split / +/, $exts;
if((grep { $_ eq $ext } @exts) > 0) {
move_if_ok($incoming.$file, $extdir) && last
}
}
skar
edit bert: code tags eingefügt....
edit skar: danke bert