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 *
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"Suponiendo que está utilizando el shell bash (el caso más común), puede usar el símbolo de negación global (expansión del nombre de ruta):
Esto usa globbing extendido, por lo que primero deberá habilitar esto:
fuente
fuente
fuente
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
fuente
Para un recursivo
rm, necesitaría hacer la recursiónfindy excluir los archivos que desea conservar (ogrep, 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,zshtienerm **/*~foo/bar- tenga en cuenta que es probable que esto se encuentre con límites de longitud de argumento para grandes árboles de directorios).fuente