В чем разница между использованием "+" (плюс) и ";" (точка с запятой) в команде -exec?

Мне интересно знать, какая разница между использованием + а также ; в конце -exec Команда, когда я использую в find команда?

find .... -exec ... \; 

В.С.

find .... -exec ... + 

1 ответ

Решение

-exec ... \; будет запускать один элемент за другим. Таким образом, если у вас есть три файла, строка exec будет запущена три раза.

-exec ... {} + для команд, которые могут принимать более одного файла одновременно (например, cat, stat, ls). Файлы найдены find связаны друг с другом как xargs команда. Это означает, что меньшее количество разветвлений и небольших операций может означать значительное ускорение.

Вот демонстрация производительности с 10000 пустых файлов.

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

Опять же, это работает только для команд, которые могут принимать несколько имен файлов. Вы можете разобраться, если ваша команда такая, посмотрев ее справочную страницу. Вот краткий обзор man cat:

SYNOPSIS
       cat [OPTION]... [FILE]...

Многоточие на [FILE]... означает, что это может занять более одного файла.

+ может использоваться только для отдельных команд, и вы должны иметь только одну {} в соответствии. \; может работать с несколькими группами от нуля до многих.

Другие вопросы по тегам