如何使用 for-each 循环将所有.php文件删除到 0777 文件夹中



以下命令尝试删除/if 文件夹权限 0777 中的所有.php文件

find / -type f -perm 0777 -exec rm -rf *.php  ; -exec rm -rf *.html ;

find / -type d -perm 0777 -print0 | xargs -0 rm -rf *.php

它是删除文件夹而不是PHP文件

我希望使用终端ssh命令运行它

我搜索所有文件夹都有 0777 并将所有 PHP 文件删除到其中

您可以轻松地使用RecursiveDirectoyIterator来执行此操作,如下所示:

$directory = 'test/';
$iterator = new RecursiveDirectoryIterator($directory);
$directoryIterator = new RecursiveIteratorIterator($iterator);
foreach ($directoryIterator as $file) {
$octalPermission = substr(decoct($file->getPerms()), -4);
$extension = $file->getExtension();
if (!$file->isDir() && $octalPermission == '0777' && $extension == 'php') {
// do some stuff
unlink($file->getPathname());
}
}

这将recursively具有特定权限的特定目录中迭代您的 PHP 文件并将其删除。

仅将其用于当前目录 -不递归- 更改此目录:

$iterator = new RecursiveDirectoryIterator($directory);
$directoryIterator = new RecursiveIteratorIterator($iterator);

由以下类:

$directoryIterator = new DirectoryIterator($directory);

更新

但是,只要OP要求使用终端而不是php来执行此操作,

您可以使用以下命令:

find ./test/ -type f -name "*.php" -perm 0777 | xargs rm

更新 2 :

首先签出具有权限 777 的目录,如下所示:

find ./test/ -type d -perm 0777 | xargs -I {} find {} -type f -name "*.php" -perm 0777 | xargs rm

更新 3 :

要使此命令适用于带有空格/特殊字符的文件,您可以使用-d-delimiter 选项将其设置为n,如下所示:

find ./test/ -type d -perm 0777 
| xargs -I {} find {} -type f -name "*.php" -perm 0777 
| xargs -d 'n' rm
//      ^^^^^^^ notice this                                                  

这将找到具有PHP扩展名和权限0777的文件名,然后删除它们。


更新 4 (2017年3月31日)

对于前面的任何命令,当你尝试将xargs命令与rm命令一起使用时,如果你的搜索条件中不存在文件,终端可能会提示如下错误:

rm: missing operand

为了避免这种情况,您需要将-r选项添加到 xargs 中:

-r, --no-run-if-empty        if there are no arguments, then do not run COMMAND;

您可以按如下方式使用它:

xargs -r -d 'n' rm

最新更新