Я хочу точно знать, что {} \;
и {} \ +
и | 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'
, почему? Кто-нибудь может объяснить, что я делаю не так?