¿Cómo puedo ejecutar múltiples expresiones usando la opción -exec en Linux mediante el comando buscar?

¿Cómo puedo ejecutar múltiples expresiones usando la opción -exec en Linux mediante el comando buscar?

Leí la publicación en¿Cómo ejecuto varios comandos cuando uso buscar?. A menos que haya entendido mal la respuesta proporcionada, no creo que proporcione la solución que busco.

Mi requisito es encontrar un conjunto específico de archivos. Si lo encuentra, cree un directorio. Sólo si el directorio se ha creado correctamente, extraiga los archivos. Una vez extraído, elimine los archivos fuente. ¿Cómo podría lograr esto?

Respuesta1

En mi opinión, el enlace que publicas da la respuesta "correcta". Simplemente genera un caparazón. Sin hacer esto, no tendrás una caja de herramientas lo suficientemente grande. Túpodríaconstruir un comando de búsqueda en pseudocódigo como:

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

Esto se detendrá ante cualquier error, ya que los predicados se unen de forma natural. Pero le da un control insuficiente sobre el nombre del directorio. Está garantizado que fracasará.

Generar un shell resuelve esto ya que tendrás todo el lenguaje del shell a tu alcance:

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

Tenga en cuenta que esta versión tiene el efecto secundario de continuar con un error para cualquier iteración determinada del bucle: genera un único shell paratodoresultados. Sugeriría generar el shell con el indicador -e si desea detener cualquier error.

información relacionada