Использование -v (многословно) замедляет команды?
В этом вопросе: Как удалить все файлы и подкаталоги в каталоге БЕЗ удаления каталога в bash? спрашивается, как удалить весь файл в папке, а не саму папку.
Отличный ответ Matt включает использование флага -v для команды 'rm'.
rm -rfv dontDeleteMe && mkdir dontDeleteMe
Команда, которую я оставил, была выше. Конечно, действительно полезно, но разве флаг -v в 'rm' и / или вообще замедляет задачи, выполняемые через командную строку?
У меня есть папка с.txt-файлами (их около 100000), которые я несколько раз создавал, удалял и воссоздавал для себя. Иногда с rm, иногда в браузере файлов, и я чувствую, что использовать команду rm еще медленнее, как показано выше. Флаг -v имеет какое-либо отношение к этому?
2 ответа
Да, флаг -v замедляет команду.
Большинство, если не все программное обеспечение (или команды) проверит наличие флага, а затем выполнит связку кода, связанную с этим флагом. В случае флага -v они, скорее всего, будут выполнять несколько команд вывода (например, echo
или же printf
), который они предпочли бы пропустить без флага.
Это означает больше циклов команд для процессора и, следовательно, больше времени выполнения.
Лучше, если вы не используете флаг -v, если вы не собираетесь читать / нуждаться в сообщениях.
С другой стороны, CLI будет / должен быть быстрее, чем GUI, при условии, что вы не включаете время, необходимое для ввода команд, и нажимаете клавишу Enter.
Из этого блога суперпользователя это изображение очень хорошо объясняет медлительность
Для конкретной рассматриваемой команды результаты команды времени
//with -v
real 0m8.753s
user 0m0.816s
sys 0m2.036s
//without -v
real 0m1.282s
user 0m0.124s
sys 0m1.092s
это было сделано с каталогом, содержащим 100000 пустых файлов
Почему бы не узнать себя: использовать время.
$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real 0m0.003s
user 0m0.001s
sys 0m0.002s
$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real 0m0.002s
user 0m0.001s
sys 0m0.001s