Jak połączyć wyjście wielu poleceń `find`?

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

Jak połączyć te dwa polecenia?

  1. Albo przez połączenie obu wyszukiwanych terminów w jednym poleceniu lub

  2. Tak więc każde polecenie dodaje dane wyjściowe do tego samego pliku.

Mam nadzieję, że jasne jest, co próbuję zrobić.

akya
źródło

Odpowiedzi:

25

Łącząc:

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

Dodawanie danych wyjściowych do jednego pliku:

find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + >> checklist.chk
Florian Diesch
źródło
1
+1 za wspomnienie o możliwości dołączenia do pliku wyjściowego.
Dubu,
8

Istnieje wiele sposobów, aby to zrobić:

Za pomocą lub -o:

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

Za pomocą Regex:

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

Oba zapisują dane wyjściowe do pliku checklist.chk.

heemayl
źródło
1
Dzięki .. Wiedziałem o operatorze -o, ale nie znałem składni. Nie wiedziałem także o regexie, którego można użyć w ten sposób. Dzięki :)
akya,
4

Z -oflagą (która znajduje się w obszarze OPERATORS na findstronie man)

find . -type f \( -name "*.avi" -o -name "*.mp4" \) -exec md5sum {} + > checklist.chk
Sergiy Kolodyazhnyy
źródło