В чем разница между использованием "+" (плюс) и ";" (точка с запятой) в команде -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]...
означает, что это может занять более одного файла.
+
может использоваться только для отдельных команд, и вы должны иметь только одну {}
в соответствии. \;
может работать с несколькими группами от нуля до многих.