LINUX.ORG.RU

Валидная работа cp и rm в Perl


0

0

Так как есть известная бага с mv (и соответственно с rename в Perl) 
файлов м/у разными винчестерами, то хочется реальзовать перемещение 
через cp + rm
Вот код:
....
....
rename "$file1", "$file2" or do 
 {
   logg ("Can't move file $file1 using rename : '$!'");
   logg ("Trying move file $file1 with cp & rm ...");
   `cp $file1  $file2`;
   if ( $@ )
     {
         logg("Error while copying file $file1 : $@");
     }
   else
     {
        `rm $file1`;
        logg("Can't remove file $file1 : $@") if $@;
     }
 }   
....
....
Правильно ли я обрабатываю ошибки?

Системный вызов rename действительно неспособен перемещать файлы между разными файловыми системами - такая попытка приводит к ошибке с errno EXDEV.

Тем не менее, команда mv, насколько я знаю, умеет корректно обрабатывать такую ситуацию во всех вменяемых вариантах Unix, и нет необходимости в явном использовании пары cp/rm.

anonymous
()
Ответ на: комментарий от kri

>Как заставить mv работать правильно с подобным перемещением файлов?

Никак. В смысле, не нужно заставлять.

Если тебе известен способ заставить mv _неправильно_ работать "с подобным перемещением файлов", то поделись им, пожалуйста.

anonymous
()
Ответ на: комментарий от anonymous

man 1 mv : 
Gnu mv Bug - mv от Gnu может перемещать м/у файловыми системами только ОБЫЧНЫЕ файлы!

kri
() автор топика
Ответ на: комментарий от kri

info mv :

`mv' can move any type of file from one filesystem to another. Prior to version `4.0' of the fileutils, `mv' could move only regular files between filesystems.

Пожалуйста, приведи пример проблем, возникающих с mv.

anonymous
()
Ответ на: комментарий от anonymous

Предмет спора совершенно непонятен.

В стандартной поставке Perl есть модуль File::Copy,
который все это умеет:

> If possible, move() will simply rename the file.
> Otherwise, it copies the file to the new location and deletes the
> original.

Зачем при наличии такого модуля использовать внешние cp(1) или mv(1)
- мне непонятно.

HTH

anonymous
()
Ответ на: комментарий от anonymous

Интрига была создана заявлением про "известный баг mv" ;).

По сути, обсуждение, конечно, бессмысленно по ряду причин.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.