¿Cómo puedo eliminar un archivo específico de un conjunto de resultados usando el comando buscar en Linux?

¿Cómo puedo eliminar un archivo específico de un conjunto de resultados usando el comando buscar en Linux?

Tengo el siguiente comando que enumera todos los archivos con la extensión doc, docxetc.

find . -maxdepth 1 -iname \*.doc\*

El comando devuelve numerosos archivos, algunos de los cuales me gustaría eliminar. Entonces, por ejemplo, los resultados devueltos son

  1. Ejemplo.docx
  2. Dummydata.doc
  3. Ejemplo.doc

Me gustaría eliminar Sample.doc y Dummydata.docx. ¿Cómo elimino los archivos usando la -execopción? ¿Puedo pasar los nombres de los archivos, por rm Dummydata.docx Sample.doclo tanto, el comando tendría el siguiente aspecto?

find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc

¿Puedo pasar los nombres de los archivos dentro de {} afterrm`? p.ej

find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc

¿Existe una mejor manera de hacerlo?

Respuesta1

Si conoce los nombres de los archivos de antemano, sería más fácil eliminarlos de inmediato:

find . -iname "Dummydata.doc" -delete

O, con múltiples condiciones:

find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)

Los paréntesis fuerzan la preferencia, pero es necesario escaparlos o citarlos ya que, por lo general, los paréntesis tienen un significado especial para su shell.


De lo contrario, si primero desea examinar la lista de resultados, puede pasar la ruta de los archivos encontrados (aquí, colocados en {}) a sh. Para el shcomando, la ruta será $0y podrás compararla con el nombre del archivo que deseas eliminar:

find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;

Aquí, elimine echouna vez que esté seguro de que se eliminará el archivo correcto. Pero me temo que será más fácil eliminar los archivos manualmente.

información relacionada