删除perl脚本中的Windows符号链接?
假设我创建了一些
Windows符号链接,如:
rd /s /q source withlink linkdir mkdir source mkdir withlink echo blah > source/myfile cd withlink touch blah mklink mylink ..sourcemyfile @REM mklink /d linkdir ..source cd .. 我可以用shell删除包含符号链接的目录 rd /s /q withlink 我在perl脚本中有同样的任务要做,我们目前使用的是cygwin’rm -rf’.不幸的是我们正在使用cygwin 1.5和rm和rm -rf在我想使用的符号链接上的版本中无法正常工作(they delete symbolic link contents instead of the symlinks). 如果我尝试: use File::Path qw( rmtree ) ; rmtree( ['withlink'] ) ; 这很好用,只要我没有任何目录符号链接(比如上面的create-the-links序列中的REM),那么perl的rmtree最终表现得像cygwin,我最终得到了目录内容我的原始目录已删除. 有没有人建议我可以使用备用perl递归目录删除方法.我想到了一个shell标注: system("rd /s /q withlink") ; 但这需要我测试平台并为Windows和Unix提供不同的perl代码. 编辑: 解决方法
您必须使用rmdir删除Windows中的目录符号链接和连接点,您必须使用简单的取消链接来删除文件的符号链接.原因是目录符号链接和连接点实际上是一个空目录,带有其他文件系统元数据(称为重新分析点数据).类似地,文件的符号链接是具有重新分析点数据的空文件.当您阅读Microsoft NTFS文档时,这样的目录或文件称为重新分析点.重分析点类型由所谓的重新分析点TAG确定.用户可以看到两个重新分析点标记为“链接”:
> IO_REPARSE_TAG_SYMLINK – 如果在目录上设置 – 它是目录的符号链接,如果在文件中设置 – 它是文件的符号链接 总结一下: >您将符号链接删除到目录和连接点,就像它们是空目录一样(事实上,如果您检查这样的事物的属性,它有两个:FILE_ATTRIBUTE_DIRECTORY和FILE_ATTRIBUTE_REPARSE_POINT). 希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |