Попробуйте это
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print
, Кроме того, Вы могли попытаться встроить свой исполнительный оператор в sh сценарии и затем сделать:
find -exec some_script {} \;
Немного отличающийся подход должен был бы использовать xargs:
find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123
, который я всегда находил немного легче понять и адаптироваться (-print0 и-0 аргументов необходимы для преодоления имен файлов, содержащих пробелы)
Это могло бы (не протестированный) быть более эффективным, чем использование - должностное лицо, потому что это передаст список по каналу файлов к xargs, и xargs удостоверяется, что jhead командная строка не становится слишком длинной.
С -exec
можно только выполнить единственный исполняемый файл с некоторыми аргументами, не произвольные команды оболочки. Для хитрости этого можно использовать sh -c '<shell command>'
.
Действительно отмечают, что использование -exec
довольно неэффективно. Для каждого файла, который найден, команда должна быть выполнена снова. Было бы более эффективно, если можно избежать этого. (Например, путем перемещения grep
внешняя сторона -exec
или передачи по каналу результатов find
к xargs
, как предложено Palmin.)
Поскольку это производит список, был бы Вы нет:
find /path/to/jpgs -type f -exec jhead -v {} \; | grep 123
или
find /path/to/jpgs -type f -print -exec jhead -v {} \; | grep 123
Помещенный Ваш grep на результаты находки - должностное лицо.