Tengo el siguiente comando que enumera todos los archivos con la extensión doc
, docx
etc.
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
- Ejemplo.docx
- Dummydata.doc
- Ejemplo.doc
Me gustaría eliminar Sample.doc y Dummydata.docx. ¿Cómo elimino los archivos usando la -exec
opción? ¿Puedo pasar los nombres de los archivos, por rm Dummydata.docx Sample.doc
lo 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 {} after
rm`? 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 sh
comando, la ruta será $0
y 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 echo
una vez que esté seguro de que se eliminará el archivo correcto. Pero me temo que será más fácil eliminar los archivos manualmente.