Как я использую канал в исполнительном параметре для команды находки?

72
задан Taher Khorshidi 9 May 2015 в 11:54
поделиться

4 ответа

Попробуйте это

find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print

, Кроме того, Вы могли попытаться встроить свой исполнительный оператор в sh сценарии и затем сделать:

find -exec some_script {} \;
79
ответ дан Damien Pollet 24 November 2019 в 12:44
поделиться

Немного отличающийся подход должен был бы использовать xargs:

find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123

, который я всегда находил немного легче понять и адаптироваться (-print0 и-0 аргументов необходимы для преодоления имен файлов, содержащих пробелы)

Это могло бы (не протестированный) быть более эффективным, чем использование - должностное лицо, потому что это передаст список по каналу файлов к xargs, и xargs удостоверяется, что jhead командная строка не становится слишком длинной.

12
ответ дан Palmin 24 November 2019 в 12:44
поделиться

С -exec можно только выполнить единственный исполняемый файл с некоторыми аргументами, не произвольные команды оболочки. Для хитрости этого можно использовать sh -c '<shell command>'.

Действительно отмечают, что использование -exec довольно неэффективно. Для каждого файла, который найден, команда должна быть выполнена снова. Было бы более эффективно, если можно избежать этого. (Например, путем перемещения grep внешняя сторона -exec или передачи по каналу результатов find к xargs, как предложено Palmin.)

3
ответ дан Community 24 November 2019 в 12:44
поделиться

Поскольку это производит список, был бы Вы нет:

find /path/to/jpgs -type f -exec jhead -v {} \; | grep 123

или

find /path/to/jpgs -type f -print -exec jhead -v {} \; | grep 123

Помещенный Ваш grep на результаты находки - должностное лицо.

1
ответ дан Xetius 24 November 2019 в 12:44
поделиться