Posible duplicado:
¿Cómo eliminar todos los archivos en un directorio excepto algunos?
¿Cómo eliminar todos los archivos menos uno (o algunos) en Unix?
Algo como
rm -rf -ignore myfile.txt *
Posible duplicado:
¿Cómo eliminar todos los archivos en un directorio excepto algunos?
¿Cómo eliminar todos los archivos menos uno (o algunos) en Unix?
Algo como
rm -rf -ignore myfile.txt *
Respuestas:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Ejemplo:
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Para eliminar todos los archivos excepto 'test2':
ls * | grep -v test2 | xargs rm -rf
Entonces la salida 'ls' es:
test2
EDITAR:
Gracias por el comentario. Si el directorio contiene algunos archivos con espacios:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Puedes usar (con bash):
rm !("test 1"|"test 4")
Salida 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Esta página ofrece una variedad de opciones dependiendo del shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Para un recursivo rm, necesitaría hacer la recursión findy excluir los archivos que desea conservar (o grep, pero eso puede meterlo en problemas de espacio en blanco). Para un glob de shell, los shells modernos tienen patrones de glob que pueden usarse para excluir archivos; esto se puede combinar con la recursividad global de nivel de shell cuando esté disponible (por ejemplo, zshtiene rm **/*~foo/bar- tenga en cuenta que es probable que esto se encuentre con límites de longitud de argumento para grandes árboles de directorios).