use File::Find; ... # there are directory d:\perl\source\test\öa and file d:\perl\source\test\öa\ü.txt under \test\ $srcdir="d:\\perl\\source\\test"; $dstdir="d:\\test2"; finddepth(\&check_and_copy, $srcdir); # sub check_and_copy check the time of file/dir and only copy the updated file/dir to $dstdir