如何从数据库中删除除大列表以外的所有文件?

时间:2014-08-11 06:09:06

标签: php mysql linux bash find

我有一大堆存储在文件系统中的文件,其中一些是mp4,jpgs和pdf

我想删除所有文件,除了从mysql查询中提取的一些文件。例如RandomMovie_04.mp4,AwesomeImage.jpg

这是我的文件结构

files/
    messages/
        images/
            45/ --> this is the ID in the DB
            46/
    articles/
        images/
            124/
            125/
        videos/
            124/
            207/

我不想删除的文件是从数据库中提取的

我正在使用PHP(CakePHP)和MySQL

试过这个并且它适用于一个文件,但我找不到用文件列表执行此操作的方法

find * -maxdepth 5 -not -name "RandomMovie_04.mp4" -type f -exec ls "{}" \; > list.txt

这适用于两个

find * -maxdepth 5 -not -name "RandomMovie_04.mp4" -not -name "AwesomeImage.jpg" -type f -exec ls "{}" \; > list.txt

我必须为所有排除的文件(在php脚本中)执行此操作? like -not -name fileA -not -name fileB -not -name to_the_infinite ...

由于

对不起,如果我的英语太糟糕了:(

1 个答案:

答案 0 :(得分:1)

如果您可以从PHP脚本中获取一系列名称,则可以像这样为find创建字符串:

<?php 
$files = array("RandomMovie_04.mp4", "AwesomeImage.jpg", "GreatDoc.pdf");
echo implode(' -or ', array_map(function($x) { return "-name '$x'"; }, $files));

哪个输出:

-name 'RandomMovie_04.mp4' -or -name 'AwesomeImage.jpg' -or -name 'GreatDoc.pdf'

您的find命令可以是:

find /path/to/dir -not \(  $(php files.php) \) -delete

find将删除所有未找到姓名的文件。

请注意,您应该从单独的目录运行它,否则将删除PHP文件。

相关问题