簡體   English   中英

PHP從目錄中刪除所有文件-排除文件擴展名

[英]PHP Remove all Files From a Directory - Exclude File Extension

我一直在努力尋找刪除單個目錄中除單個文件擴展名(即不是.zip任何文件)中所有文件的最佳方法

到目前為止,我目前使用的成功刪除所有文件的方法是:

$files = glob('./output/*');
foreach($files as $file)
{ 
    if(is_file($file))
    unlink($file); // delete file
}

我試圖這樣修改:

$files = glob('./output/**.{!zip}', GLOB_BRACE);
foreach($files as $file)
{
  if(is_file($file))
    unlink($file); // delete file
}

但是,我沒有達到預期的結果。 我更改了以下行,僅刪除了zip文件本身(因此,可以執行所需的操作)。

$files = glob('./output/*.{zip}', GLOB_BRACE);

我了解還有其他方法可以讀取目錄內容並使用strpos / preg_match等進行相應刪除。 我也看到了許多其他方法,但是這些方法似乎很麻煩,或者打算用於遞歸目錄循環。

我當然不嫁給glob() ,我只是想知道刪除單個目錄中不是.zip文件的所有文件的最簡單/最有效的方法。

任何幫助/建議表示贊賞。

$exclude = array("zip");
$files = glob("output/*");
foreach($files as $file) {
    $extension = pathinfo($file, PATHINFO_EXTENSION);
    if(!in_array($extension, $exclude)) unlink($file);
}

該代碼通過具有一組排除的擴展名來工作,將所有文件加載到目錄中,然后檢查每個文件的擴展名。 如果擴展名在排除列表中,則不會被刪除。 否則,確實如此。

這應該為您工作:

(我只是使用array_diff()來獲取與*.zip不同的所有文件,然后瀏覽這些文件並取消鏈接)

<?php

    $files = array_diff(glob("*.*"), glob("*.zip"));
    foreach($files as $file) {
      if(is_file($file))
        unlink($file); // delete file
    }

?>

調用外殼怎么樣? 因此在Linux中:

$path = '/path/to/dir/';
$shell_command = escapeshellcmd('find ' . $path .' ! -name "*.zip" -exec rm -r {}');
$output = shell_exec($shell_command);

我僅想知道刪除單個目錄中不是.zip文件的所有文件的最簡單/最有效的方法。

SPL迭代器非常有效。

這就是我要使用的:

$folder = __DIR__;
$it = new FilesystemIterator($folder, FilesystemIterator::SKIP_DOTS);

foreach ($it as $file) {
    if ($file->getExtension() !== 'zip') {
        unlink($file->getFilename());
    }
}

您是否嘗試過:

$path = "dir/";
$dir = dir($path);
while ($file = $dir->read()) {
    if ($file != "." && $file != ".." && substr($file, -4) !== '.zip') {
    unlink($file);
    }
}

暫無
暫無

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

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