簡體   English   中英

刪除文件名中包含特殊字符的文件

[英]Delete files with special characters in filenames

我需要刪除舊文件文件名中使用特殊字符,如空間, ,()! 等等,通過PHP。 經典的unlink($filename)對這些文件不起作用。 如何將文件名轉換為接受unlink函數和文件系統的文件名? 它在Solaris計算機上運行,​​我沒有其他訪問權限。

你是如何構建$filename unlink應該可以處理任何帶有特殊字符的文件名,如果你正常轉義它。 例如

對於一個名稱為this has, various/wonky !characters in it的文件,其中this has, various/wonky !characters in it

 $filename = 'this has\, various\/wonky \!characters in it';
 unlink($filename);

應該管用。

unlink接受任何有效的字符串,並嘗試刪除該字符串中的文件。

unlink('/home/user1/"hello(!,');

也許你沒有正確地逃避某些角色。

您還可以使用RegexIterator找到所有需要的文件並取消鏈接:

<?php

$dir  = new RecursiveDirectoryIterator('.');
$iterator = new RecursiveIteratorIterator($dir);
$regex = new RegexIterator($iterator, '/(^.*[\s\.\,\(\)\!]+.*)/', RecursiveRegexIterator::GET_MATCH);

foreach ($regex as $file) {
        if (is_file($file[0])) {
                print "Unlink file {$file[0]}\n";
                unlink($file[0]);
        }
}

此代碼片段遞歸遍歷當前('。')的所有目錄,並通過regex'/(^。 [\\ s \\,。()!] +。 )/'匹配所有文件,然后刪除它們。

我在Linux中這樣做的方法是使用絕對路徑,例如“rm ./filename”,即點斜杠。

您也可以使用逃脫字符。 就像“rm \\ -filename”那樣 - 反向連字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM