1

我有几个 PHP 脚本用于从我的整个服务器上的所有文件夹中删除 error_log、.DS_Store 等文件。我只是将这些脚本上传到我的根目录 (public_html) 并在我想做一些清理工作时定期访问它们。当我访问加载脚本的 URL 时,它会自动开始工作。这一切都很完美,我想继续使用它。

但是,我很想将这种自动化整合到一个脚本中,我可以在其中列出一组不需要的文件,如下所示:

$unwanted_filenames = array(
'.DS_Store',
'.localized',
'Thumbs.db',
'error_log'
);

只需遍历所有文件夹并删除我在数组中列出的所有文件。

我现在使用的脚本太过分了,列出了每个单独的文件以及它释放了多少等。我是一个极简主义者,并且希望使用最简单的脚本和最少的代码来完成工作。

因此,当我访问该页面时,它会自动开始工作,没有任何内容的白屏很好,然后可能是一个简单的“完成。释放了 3MB”。信息。而已。

4

2 回答 2

2

好的 - 这是最短的,但我能想到的 PHP 可以做到:

$unwanted_filenames = array(
    '.DS_Store',
    '.localized',
    'Thumbs.db',
    'error_log'
    );
$it = new RecursiveDirectoryIterator("/");  // Set starting directory here
foreach(new RecursiveIteratorIterator($it) as $file) {
    if (in_array(basename($file), $unwanted_filenames)) {
        @unlink($file);  // THe @ hides errors, remove if you want to see them
    }
}

希望不言自明 - 是的,它确实有子目录(这是“递归”位)。

你说的是简约,所以我没有包括释放的空间,但如果你想添加它,只需在取消链接之前添加一个 $FreedSpace += filesize($file) 。

于 2012-06-02T13:40:10.860 回答
1

我正在使用这个,你可以这样做:

<?php    
    $dir = "/var/www/vhosts/"; //Write your dirname here
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    $total_thumbs = 0;
    $total_ds = 0;
    foreach ($rii as $file) {
        if ($file->isDir()){
            continue;
        }

        $parcala = explode('.', $file->getFilename());
        $uzanti = end($parcala);

        if ($file->getFilename() == 'Thumbs.db') {
            unlink($file->getPathname());
            $total_thumbs++;
        }

        if ($uzanti == '.DS_Store' || $file->getFilename() == 'DS_Store' || $file->getFilename() == '.DS_Store') {
            unlink($file->getPathname());
            $total_ds++;
        }
    }

    echo $total_thumbs . ' Thumbs.db file and ' . $total_ds . ' DS_Store file deleted!';

如果你想要自动化,你可以使用Cronjob

于 2017-11-09T20:37:24.223 回答