Почему не работает find -exec mv {} ./target/ +?

Я хочу точно знать, что {} \; и {} \ + и | 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'

, почему? Кто-нибудь может объяснить, что я делаю не так?

96
задан jww 4 March 2018 в 20:29
поделиться