删除文件名中含有特殊字符的文件
我需要删除文件名中含有特殊字符的旧文件,例如空格、、
、(
,)
、!
和通过 PHP 等等。经典的 unlink($filename)
不适用于这些文件。如何将文件名转换为接受取消链接函数和文件系统的文件名?它在 Solaris 计算机上运行,我无法通过其他方式访问它。
I need to delete old files with special characters in filenames like space,,
,(
,)
,!
and so on via PHP. Classic unlink($filename)
does not work for these files. How can I transform filenames to filenames which accepts unlink function and filesystem? It's running on a Solaris machine and I don't have another access to it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您如何构建
$filename
?如果您对其进行正常转义,则 unlink 应该适用于任何带有特殊字符的文件名。例如,对于名称为
的文件,其中包含各种/奇怪的字符
,那么应该可以工作。
How are you constructing the
$filename
? unlink should work on any filename with special characters if you do the normal escaping on it. e.g.for a file with a name of
this has, various/wonky !characters in it
, thenshould work.
unlink 接受任何有效字符串,并尝试删除该字符串中的文件。
也许您没有正确转义某些字符。
unlink accepts any valid string and will try to delete the file in that string.
Perhaps you are not properly escaping certain characters.
您还可以使用 RegexIterator 查找所有需要的文件并取消链接它们:
此代码片段递归遍历当前 ('.') 中的所有目录,并通过正则表达式 '/(^.[\s\,.()! ]+.)/',然后删除它们。
You can also find all needed files and unlink them using RegexIterator:
This code snippet recursively traverse all directories from current ('.') and matches all files by regex '/(^.[\s\,.()!]+.)/', then delete them.
我在 Linux 中的做法是使用绝对路径,例如“rm ./filename”,即点斜杠。
您还可以使用转义字符。就像“rm \-filename”一样,即 - backspash 连字符。
The way I do it in Linux is to use absolute paths, like "rm ./filename" that is dot slash.
You can also use escape charachters. Like "rm \-filename" that is - backspash hyphen.