Я хочу точно знать, что делать {} \;
и {} \+
и | xargs ...
. Просьба пояснить их пояснениями.
Ниже 3 команды запускают и выводят один и тот же результат, но первая команда занимает немного времени, а формат тоже немного отличается.
find . -type f -exec file {} \;
find . -type f -exec file {} \+
find . -type f | xargs file
Это потому, что в первом выполняется команда file
для каждого файла, поступающего из команды find
. Итак, в основном это работает как:
file file1.txt
file file2.txt
Но последние 2 find с командами -exec
запускают команду файла один раз для всех файлов, как показано ниже:
file file1.txt file2.txt
Затем я запускаю следующие команды, на которых первый запускается без проблем, а второй - с сообщением об ошибке.
find . -type f -iname '*.cpp' -exec mv {} ./test/ \;
find . -type f -iname '*.cpp' -exec mv {} ./test/ \+ #gives error:find: missing argument to `-exec'
Для команды с {} \+
она дает мне сообщение об ошибке
find: missing argument to `-exec'
почему? может ли кто-нибудь объяснить, что я делаю неправильно?