Я написал скрипт, разрешающий ограниченный доступ пользователей к удалению файлов на рабочем веб-сервере. Тем не менее, чтобы избежать проблем с жирным шрифтом, приводящих к случайному удалению / проблемам с файловой системой, я жестко закодировал базовый каталог в переменной ... Но конечный результат заключается в неправильном создании нужного пути из жестко закодированного каталога + пользовательских путей, если ониесть * подстановочный знак ...
У меня есть сервер Apache 2.4.6, который кэширует веб-контент для пользователя. У них есть пользователь джейлкита для SSH в эту коробку. Поскольку это производственный процесс, они сильно ограничены в доступе, однако я хотел бы дать им возможность очищать определенные каталоги кеша на их собственных условиях. Чтобы не допустить, чтобы это пошло не так, я жестко закодировал каталог основного кэша в переменную скрипта, так что, несмотря ни на что, скрипт будет работать только по этому пути.
Пока что этот скриптхорошо работает для итерации по своим желаемым путям очистки кэша ... Пользователь создает файл .txt с / cachePath, определенным в каждой строке, и скрипт будет проходить по нему и удалять эти пути. Это прекрасно работает для / path и / content / path2 / ... Но я не могу на всю жизнь заставить его работать с подстановочными знаками (т.е. / path / , / content / path2 / ). Вероятно, есть более сексуальный способ справиться с этим, чем то, что я делал до сих пор (в настоящее время есть оператор if | else для обработки * или / *, не включенный в приведенный ниже скрипт), но я получаю всевозможные нежелательные результаты, пытаясь обработать его. * * / 1009 *, введенный пользователем * или * по произвольному путижелаемого выхода пока нет. Например, если paths.txt содержит только «*», результатом будет захват всех каталогов в / и добавление их в «cacheDir»?
/mnt/var/www/html/testing/backup
/mnt/var/www/html/testing/bin
/mnt/var/www/html/testing/boot
/mnt/var/www/html/testing/data
/mnt/var/www/html/testing/dev
/mnt/var/www/html/testing/etc
/mnt/var/www/html/testing/home
/mnt/var/www/html/testing/lib
/mnt/var/www/html/testing/lib64
...
Если paths.txt равен «./*», он добавляетфайлы из местоположения самого скрипта:
/mnt/var/www/html/testing./cacheClear.sh
/mnt/var/www/html/testing./paths.txt
В конечном итоге я ищу следующее: if / mnt / var / www / html содержит следующие каталоги:
/content/
/content/path/
/content/path/file1.txt
/content/path/file2.txt
/content/path/subdir/
/path2/
/path2/fileA.txt
/path2/fileB.txt
Затем файл, содержащий /content/path/*
, должен удалить /content/path/file1.txt, file2.txt и / subdir / и сохранить каталог / content / path /.
Если paths.txtфайл содержит
/content/path
/path2/*
Тогда каталог / content / path и подфайлы / каталоги должны быть удалены, и файлы в каталоге / path2 / также будут удалены ... Но сейчас скрипт не видитобъединено $cacheDir
+ $paths
как реальное / ожидаемое местоположение, если оно содержит * где-либо в нем. Работает нормально без * символов.