Использование параметра -exec с командой Find в Bash

Я пытаюсь использовать параметр -exec с командой find, чтобы найти определенные файлы в каталоге моих массивных панорам и переместить их в указанное место. Команда, которую я использую ниже, передает аргумент ошибки, не найденный для -exec. Может ли кто-нибудь указать на мою ошибку при разборе команды? Или мне придется вместо этого создать какую-то трубу?

$ find -name ~/path_to_directory_of_photos/specific_photo_names* -exec mv {} ~/path_to_new_directory/


person Hollis    schedule 24.09.2010    source источник
comment
Может быть, перенести это на serverfault?   -  person Chuck Vose    schedule 24.09.2010
comment
Я проголосовал за переход на SuperUser.Com, но на самом деле это было бы более уместно на Unix.StackExchange.Com.   -  person Jörg W Mittag    schedule 25.09.2010


Ответы (3)


Вам нужно завершить исполняемую команду экранированной точкой с запятой (\;).

person Karl Bielefeldt    schedule 24.09.2010
comment
Хорошо, спасибо, пропустил пробел в конце между ~/path_to_new_directory и \; это сбивало меня с толку. Решено. - person Hollis; 25.09.2010

Вы должны указать шаблон имени в кавычках, иначе оболочка расширит в нем любые подстановочные знаки перед запуском find. Вы также должны иметь точку с запятой (с обратной косой чертой, чтобы оболочка не интерпретировала ее как разделитель команд), чтобы указать конец команды mv.

Правильная команда будет:

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv {} ~/path_to_new_directory \;
person dogbane    schedule 24.09.2010

Я знаю, что этот пост устарел, но вот мой ответ на случай, если он поможет кому-то еще. См. Фон из ">этот пост. Если вы закончите команду + вместо \; вы можете управлять им гораздо эффективнее. \; заставит "mv" выполняться один раз для каждого файла, а + заставит "mv" выполняться с максимальным количеством аргументов. Например.

mv source1 destination/
mv source2 destination/
mv source3 destination/

vs.

mv source1 source2 source3 destination/

Последний намного эффективнее. Чтобы использовать +, вы также должны использовать --target-directory. Например.

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv --target-directory="~/path_to_new_directory" {} +
person Rusty Lemur    schedule 15.12.2015