うまいぼうぶろぐ

linuxとhttpdとperlのメモ

File::Copyのmoveはパーティションをまたがってディレクトリを移動できない?

ファイルは異なるパーティション間でも移動できたけど、ディレクトリはダメだった。perldoc File::Copyしても、それらしい記述は見つけられなかったんだけどどうなんだろ。

パーティションの状態

/rootと/tmpが/dev/md0、/var/は/dev/md3。

# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md0               4126976   2664876   1252460  69% /
/dev/md1               4127040   1711348   2206048  44% /home
none                    515328         0    515328   0% /dev/shm
/dev/md3               8364788   2320100   5619776  30% /var

move-test.pl

#!/usr/bin/perl

use File::Copy;
use strict;
use warnings;

my %filetype_of = (
  'file' => {
    '/root/file1' => '/tmp/file1',
    '/root/file2' => '/var/file2',
  },
  'dir', => {
    '/root/dir1'  => '/tmp/dir1',
    '/root/dir2'  => '/var/dir2',
  },
);

for my $key (sort keys %filetype_of) {

  for my $src (sort keys %{$filetype_of{$key}}) {
    system("/bin/touch $src") if !-f $src and $key eq 'file';
    system("/bin/mkdir $src") if !-d $src and $key eq 'dir';

    my $dst = $filetype_of{$key}->{$src};
    move $src, $dst or print "$key: Can't move $src to $dst\n";
  }
}

テスト

# perl move-test.pl
dir: Can't move /root/dir2 to /var/dir2

/root/dir2 => /var/dir2のmoveだけが失敗した。