Как объединить вывод нескольких команд `find`?

11
find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + > checklist.chk

Как совместить эти две команды?

  1. Либо путем объединения обоих поисковых терминов в одной команде или

  2. Так что каждая команда добавляет свой вывод в один и тот же файл.

Надеюсь, понятно, что я пытаюсь сделать.

Akya
источник

Ответы:

25

Сочетание:

find -type f \( -name "*.avi" -or -name '*.mp4' \) -exec md5sum {} + > checklist.chk 

Добавление вывода в один файл:

find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + >> checklist.chk
Флориан Диш
источник
1
+1 за упоминание о возможности добавления в выходной файл.
Дубу
8

Есть много способов сделать это:

Используя Или -o:

find . -type f \( -name '*.avi' -o -name '*.mp4' \) -exec md5sum {} + > checklist.chk

Используя Regex:

find . -type f  -regextype posix-extended -regex '.*\.(avi|mp4)$' -exec md5sum {} + > checklist.chk

Оба запишут вывод в файл checklist.chk.

heemayl
источник
1
Спасибо .. Я знал об операторе -o, но не знал синтаксис. Также не знал о регулярных выражениях можно использовать, как это. Спасибо :)
Акья
4

С -oфлагом (который находится под ОПЕРАТОРАМИ на findстранице man)

find . -type f \( -name "*.avi" -o -name "*.mp4" \) -exec md5sum {} + > checklist.chk
Сергей Колодяжный
источник