Предположим, я создал несколько символических ссылок Windows, например:
rd /s /q source withlink linkdir
mkdir source
mkdir withlink
echo blah > source/myfile
cd withlink
touch blah
mklink mylink ..\source\myfile
@REM mklink /d linkdir ..\source
cd ..
Я могу удалить каталог, содержащий символические ссылки в оболочке, с помощью
rd /s /q withlink
У меня та же задача, чтобысделать в Perl-скрипте, где мы в настоящее время используем cygwin 'rm -rf'.К сожалению, мы используем cygwin 1.5, а rm и rm -rf не работают должным образом в этой версии с символическими ссылками, которые я хотел бы использовать ( они удаляют содержимое символических ссылок вместо символических ссылок ).
Если я попытаюсь:
use File::Path qw( rmtree ) ;
rmtree( ['withlink'] ) ;
Это прекрасно работает, при условии, что у меня нет символьных ссылок в каталоге (например, REM, описанных выше в последовательности создания ссылок),затем rmtree в perl ведет себя как cygwin, и я в итоге удаляю содержимое каталога моего исходного каталога.
Есть ли у кого-нибудь предложение альтернативного рекурсивного метода удаления каталога perl, который я мог бы использовать.Я подумал только о вызове оболочки:
system("rd /s /q withlink") ;
, но для этого нужно протестировать платформу и использовать другой код perl для Windows и Unix.
РЕДАКТИРОВАТЬ: обратите внимание, что в отличие от Unix, unlink () не работает для удаления символьной ссылки на каталог, по крайней мере с perl v5.6.0, который в настоящее время используется нашей системой сборки.Тем не менее, rmdir () работает для удаления символической ссылки на каталог Windows.