Как удалить все файлы, кроме одного, из каталога с помощью PHP?


У меня есть несколько каталогов с некоторыми файлами в них:

/test1/123.jpg
/test1/124.jpg
/test1/125.jpg
/test2/123.jpg
/test2/124.jpg

Я хочу удалить все, кроме /test1/124.jpg or /test2/124.jpg?

Я знаю имя каталога и имя файла. Есть ли способ сделать это в среде Linux с php и, возможно, unlink?

Author: Brian Tompsett - 汤莱恩, 2012-08-11

5 answers

Вы можете попробовать:

for ($i=1;$i<=2;$i++){
    shell_exec ('mv /test'.$i.'/124.jpg /test'.$i.'/keep.jpg');
    shell_exec ('rm /test'.$i.'/12*.jpg');
    shell_exec ('mv /test'.$i.'/keep.jpg /test'.$i.'/124.jpg');
}
 2
Author: NotGaeL, 2012-08-10 23:46:04

Просто отредактируйте $dir и $leave_files, чтобы отредактировать местоположения и файлы.

$dir = 'test1';
$leave_files = array('124.jpg', '123.png');

foreach( glob("$dir/*") as $file ) {
    if( !in_array(basename($file), $leave_files) )
        unlink($file);
}

Вы бы выполнили это один раз для каждого каталога.

Также не забудьте указать $dir полный путь (без косой черты), если целевой каталог не находится в той же папке, что и этот скрипт.

 24
Author: HappyTimeGopher, 2012-08-11 00:01:52

Возможно, немного грубо, но если вы работаете в системе Linux, вы могли бы сделать это (при условии, что вы находитесь в правильном каталоге):

<?php shell_exec('rm $(ls * | grep -v '.$fileYouWantToKeep.')'); ?>

Вам, очевидно, потребуется отфильтровать эту переменную, если она содержит какие-либо пользовательские данные.

 3
Author: Grenville, 2012-08-10 23:33:39

Вот еще один вариант:

<?php
$dirList = array('/path/to/dir1','/path/to/dir2'); //List of Dirs with files to be deleted. No trailing slash
$saved = array('path/to/file1','path/to/file2'); //List of files to be saved, no leading slash

foreach($dirList as $directory){
$list = scandir($directory);
foreach($list as $file){
if(!is_int(array_seach($directory.'/'.$file,$saved))){ //Array search returns key if needle exists, so we check if it does not return int
unlink($file);
}
}
}

?>

У меня сейчас нет доступа к моему серверу, поэтому я не тестировал его, но я думаю, что он должен работать. Сначала попробуйте это в некоторых тестовых каталогах и посмотрите, работает ли это.

 0
Author: Constantine Loukas, 2012-08-10 23:42:41

Вы можете переместить файлы во временную папку, затем стереть папку, создать новую и переместить папку с именем старой и переместить фотографии обратно, стереть папку tmp. $прибыль $

 0
Author: failuuuureee, 2013-01-05 05:49:11