Но вопрос, что делает эта команда? Я знаю команду find, но опций нет, например выражение в кавычках, а также -exec и ...
find /var -name "[0-9]*test[A-Z]" -exec {} /root/{}';'
find /var
инструктирует find
начать поиск в каталоге /var
.
-name "[0-9]*test[A-Z]"
- это шаблон поиска, который дает команду find
возвращать только те файлы / папки, которые соответствуют шаблону "[0-9]*test[A-Z]"
. Если вы не заключите в кавычки строку поиска, ваша оболочка расширит этот шаблон поиска и попытается выполнить результат. Цитируя шаблон поиска, вы передаете его в качестве аргумента find /var -name
.
Часть -exec...
исходного вопроса имеет синтаксическую ошибку, и она должна быть -exec {} /root/{} ';'
(обратите внимание на пробел перед ';'
, как прокомментированы десерт и маргаритка).
Он инструктирует find
выполнить следующие аргументы, где {}
заменяется результатом поиска find
. Обычно вы также должны заключать их в кавычки, чтобы предотвратить расширение оболочки.
Наконец, ';'
определяет, как секция -exec
должна обрабатывать результаты поиска при выполнении команды. ';'
дает команду find выполнить команду -exec
для каждого результата поиска. При использовании '+'
вместо этого запускается команда -exec
со всеми результатами поиска. Это также должно быть заключено в кавычки или экранировано, чтобы предотвратить расширение оболочки и аргумент find...-exec
.
Небольшой пример, который иллюстрирует разницу между ";"
и "+"
, выглядит следующим образом.
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" ";"
./12ltestA
./1ltestA
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" "+"
./12ltestA ./1ltestA