Borrar todos los archivos de un directorio menos los que…

terMenos los que respetan un PATRON:

for a in `ls | grep -v PATRON`; do rm -fr $a; done

Menos los que contienen tar.gz en su nombre:

for a in `ls | grep -v tar.gz`; do rm -fr $a; done

Útil en muchas situaciones.

La línea de comandos es tu amiga.

About Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí un libro de cuentos que se puede descargar gratuitamente.
This entry was posted in GNU/Linux and tagged , . Bookmark the permalink.
  • http://pyvore.com/ John Lenton

    hmm.. así, si la gente tiene espacios o cosas más raras en sus nombres de archivos (cosa cada vez más común), se rompe.

  • http://pyvore.com/ John Lenton

    una que se banca muchas más cosas pero no n:
    ls | grep -v tar.gz | while read a; do rm -rf “$a”; done
    y la única que conozco que se banca todo:
    find -depth -print0 | grep -vzZ tar.gz | xargs -0 rm -f

  • jjconti

    Wow John! Gracias por compartir la sabiduría!

  • Chema Cortés

    Algunas puntualizaciones: los patrones para grep son expresiones regulares. Para excluir los que tengan en el nombre 'tar.gz' habría que usar 'tar.gz' como patrón.

    Pero no es necesario usar grep puesto que 'ls' permite excluir por patrones por sí mismo:

    ls -I PATRON

    Así mismo, es mejor realizar todo en un sólo comando, evitando el ejecutar varias veces el 'rm'.

    Juntando todo quedaría así:

    rm -fr `ls -I PATRON`

    Por ejemplo, para borrar todo excepto los ficheros que acaban en 'tar.gz':

    rm -fr `ls -I *.tar.gz`

  • jjconti

    Gracias Chema!

  • Chema Cortés

    Algunas puntualizaciones: los patrones para grep son expresiones regulares. Para excluir los que tengan en el nombre 'tar.gz' habría que usar 'tar.gz' como patrón.

    Pero no es necesario usar grep puesto que 'ls' permite excluir por patrones por sí mismo:

    ls -I PATRON

    Así mismo, es mejor realizar todo en un sólo comando, evitando el ejecutar varias veces el 'rm'.

    Juntando todo quedaría así:

    rm -fr `ls -I PATRON`

    Por ejemplo, para borrar todo excepto los ficheros que acaban en 'tar.gz':

    rm -fr `ls -I *.tar.gz`

  • jjconti

    Gracias Chema!

  • http://www.merecumbehotel.com/ Hotel en Santa Marta

    Muchas gracias por compartir esta información, realmente me ha sido de gran utilidad.

    Un abrazo.