bash — как использовать цикл for-each для удаления всех файлов .php в папки 0777

Следующая команда пытается удалить все файлы .php в /, если папка разрешена 0777

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 файлы в него

-1

Решение

вы можете легко использовать 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 (31 марта 2017 г.)

для любой из предыдущих команд, когда вы пытаетесь использовать 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
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]