Могу ли я удалить связь в perl со списком из команды поиска unix?

Нет ничего особенного в том, какой путь вы используете для вызова программы, которая может иметь значение, будет ли учитываться его бит setuid. Несомненно, здесь происходит одно из двух.Либо

  • программа , найденная в $ PATH , либо программа , найденная в текущем каталоге, на самом деле не одна и та же программа . Вы уверены, , что одна прога находит ту же копию прога через $ PATH ? {{1 }}
    • (Исключение: я могу придумать здесь маловероятный крайний случай, когда они могут быть одним и тем же файлом, поскольку они являются одним и тем же индексным дескриптором, но они доступны через разные точки монтирования, одна из которых имеет nosuid , а один из них - нет.)
  • prog сам обращается к своему argv [0] , чтобы узнать, как он был вызван, и отказывается действовать в соответствии со своими полномочиями setuid (или сбросив их), если он не найдет то, что ожидает.
1
20.06.2017, 19:36
1 ответ

Если ваш findподдерживает действие -delete, вы обнаружите это так быстро, как только сможете, не запуская несколько процессов удаления:

find "$DIRECTORY" -name "*.$FILETYPE" -type f -mtime +"$DELETE_OLDER_THAN" \
    -delete -print >> "$REMOVAL_LOGFILE" 2>&1

Вы обнаружите, что -exec rm {} \;работает медленно, потому что создает новый процесс для каждой операции удаления. Если он есть у вашего find,-exec rm {} +будет быстрее, потому что будет создан один rmпроцесс для значительного числа файлов. Но самым быстрым из всех однопоточных -решений будет -delete.

С несколько большей сложностью вы можете разветвить один find.. -deleteпроцесс на каталог в дереве каталогов и (по крайней мере некоторые из )работающих параллельно. Но я не знаю, сколько каталогов вы обрабатываете, поэтому я не могу определить, будет ли это чистой прибылью.

4
27.01.2020, 23:19

Теги

Похожие вопросы