Использование опции -exec с командой Find в Bash - PullRequest
4 голосов
/ 24 сентября 2010

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

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

Ответы [ 3 ]

7 голосов
/ 25 сентября 2010

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

3 голосов
/ 25 сентября 2010

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

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

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv {} ~/path_to_new_directory \;
0 голосов
/ 15 декабря 2015

Я знаю, что этот пост старый, но вот мой ответ, если он кому-нибудь еще поможет. Смотрите фон из этого поста . Если вы заканчиваете команду с + вместо \; Вы можете запустить его намного эффективнее. \; «mv» будет выполняться один раз для каждого файла, а «+» будет запускать «mv» с максимальным количеством аргументов. Э.Г.

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

против

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" {} +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...