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ónfind
y 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,zsh
tienerm **/*~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