2009-07-15 36 views
1

我有一點腳本用於刪除目錄中的所有.png文件:刪除一個目錄下的所有文件,在給定的文件大小每個

foreach (glob("*.png") as $filename) { 
    echo "$filename size " . filesize($filename) . "\n"; 
    unlink($filename); 
} 

如何藉此一步刪除所有.png文件超過一定的文件大小?

我有腳本的另一位是找出目錄中的所有文件的文件大小:

$bytes = filesize('example.png'); 

如何將二者結合起來?

+0

使用if! if($ bytes)> MAX – 2009-07-15 11:56:49

+0

爲什麼不直接運行「find/path/to/dir -type f -size + 1024k」作爲shell命令或者通過system()調用? – 2009-07-15 12:11:12

回答

3

您可以使用if語句來檢查大小是否高於閾值:

$threshold = 1024; 

foreach (glob("*.png") as $filename) { 
    $size = filesize($filename); 
    if ($size > $threshold) { 
     unlink($filename); 
    } 
} 
1
$maxsize = 1024; // example 

foreach (glob("*.png") as $filename) 
{ 
    $filesize = filesize($filename); 
    echo "$filename size " .$filesize . "\n"; 
    if ($filesize > $maxsize) 
     unlink($filename); 
} 
1

您還可以使用SPLiterators

<?php 
$path = '.'; 
class MyFilter extends FilterIterator { 
    public function accept() { 
     $fi = $this->getInnerIterator()->current(); 
     return strlen($fi)-4===strripos($fi, '.png') && 1024 < $fi->getSize(); 
    } 

} 
foreach (new MyFilter(new DirectoryIterator($path)) as $deleteInfo) { 
    echo $deleteInfo, "\n"; 
} 

(可能是多一點靈活...但它只是一個例子)
如果你想它遞歸刪除看看RecursiveDirectoryIterator

相關問題