假设我创建了一些Windows符号链接,例如:
只要我没有任何目录符号链接(比如在上面创建链接序列中被注释掉的那个),这个方法就可以很好地工作,然后perl的rmtree会表现得像cygwin一样,最终导致原始目录中的内容被删除。
有人有任何替代perl递归目录删除方法的建议吗?我考虑过直接调用shell:
但这需要我测试平台,并且为Windows和Unix编写不同的Perl代码。
编辑: 请注意,与Unix不同,unlink()无法删除目录符号链接,至少在perl v5.6.0中是如此,这是我们当前构建系统使用的版本。但是,rmdir()可以用于删除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 ..
我可以在shell中使用以下命令删除包含符号链接的目录:
rd /s /q withlink
我有一个在perl脚本中需要完成的任务,目前我们使用cygwin的'rm -rf'。不幸的是,我们正在使用cygwin 1.5版本,rm和rm -rf在我想要使用的符号链接上无法正常工作(它们删除符号链接内容而不是符号链接)。
如果我尝试:
use File::Path qw( rmtree ) ;
rmtree( ['withlink'] ) ;
只要我没有任何目录符号链接(比如在上面创建链接序列中被注释掉的那个),这个方法就可以很好地工作,然后perl的rmtree会表现得像cygwin一样,最终导致原始目录中的内容被删除。
有人有任何替代perl递归目录删除方法的建议吗?我考虑过直接调用shell:
system("rd /s /q withlink") ;
但这需要我测试平台,并且为Windows和Unix编写不同的Perl代码。
编辑: 请注意,与Unix不同,unlink()无法删除目录符号链接,至少在perl v5.6.0中是如此,这是我们当前构建系统使用的版本。但是,rmdir()可以用于删除Windows目录符号链接。