¿Cómo combinar la salida de múltiples comandos `find`?

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

¿Cómo combinar estos dos comandos?

  1. Combinando ambos términos de búsqueda en un comando o

  2. Para que cada comando agregue su salida al mismo archivo.

Espero que esté claro lo que estoy tratando de hacer.

akya
fuente

Respuestas:

25

Combinatorio:

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

Agregar salida a un archivo:

find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + >> checklist.chk
Florian Diesch
fuente
1
+1 por mencionar también la posibilidad de agregar al archivo de salida.
Dubu
8

Hay muchas maneras de hacer esto:

Usando O -o:

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

Usando Regex:

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

Ambos escribirán la salida en el archivo checklist.chk.

heemayl
fuente
1
Gracias ... Sabía sobre el operador -o pero no conocía la sintaxis. Además, no sabía sobre expresiones regulares se puede utilizar de esta manera. Gracias :)
akya
4

Con la -obandera (que está debajo de OPERADORES en findla página del manual)

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