7 votos

Eliminar todos los archivos .log, excepto uno

Quiero eliminar todos los archivos con la extensión .log activada excepto uno. ¿Es posible hacer eso para eliminar todos los archivos .log de todas las carpetas, excepto los archivos de registro mongodb?

11voto

user264781 Puntos 276

Usted puede utilizar find comando, pero tenga cuidado durante el uso, usted podría terminar de quitar todo lo que tiene.

  • Importante: Primero tienes que ejecutar el comando sin el -delete opción para asegurarse de que la salida es lo que usted desea eliminar. Observe que -name busca el nombre exacto del archivo.

    $ find -not -name mongodb.log -name "*.log"
    
  • Si la salida es correcta y está seguro de que el comando busca sólo los archivos que desea eliminar y, a continuación, usted tiene que añadir el -delete opción para el FINAL del comando.

    $ find -not -name mongodb.log -name "*.log" -delete
    

    El orden de las opciones para find es significativo, y en este caso si -delete opción es colocar en cualquier lugar que no sea el fin de los comandos que se quite todo.

Ejemplo

Imaginemos que tenemos estos archivos:

$ ls
1.log  2.log  3.log  4.log  5.log  bar  foo  mongodb.log

Hagamos una lista de todos los *.log excluyendo mongodb.log. Compruebe la salida y asegurarse de que no contiene nada excepto log archivos.

$ find -not -iname mongodb.log -name "*.log"
  • Aviso de la -iname! para mantener en minúscula y en mayúscula versiones de mongodb.log.

A continuación, eliminarlos mediante:

$ find -not -iname mongodb.log -name "*.log" -delete

Comprobar de nuevo y verá los archivos de registro se han ido como se esperaba, pero mongodb.log sigue allí.

$ ls
bar  foo  mongodb.log

5voto

Stewart Puntos 1385

Para eliminar todos los archivos excepto el nombre mongodb.log, puede el uso extendido de esta expansión. En primer lugar, active la opción:

shopt -s extglob

Y a continuación, puede ejecutar:

rm !(mongodb.log)

O, para eliminar sólo los archivos con un .log de la extensión, pero no mongodb.logpuedes hacer:

rm !(mongodb).log

Por ejemplo:

$ ls
file1  file2  file3.log  file4.log  file5.log  mongodb.log
$ rm !(mongodb).log
$ ls
file1  file2  mongodb.log

si usted necesita esto para ser recursivo, para que coincida con los archivos de los subdirectorios así, usted puede utilizar el globstar opción de:

shopt -s globstar

Y, a continuación, ejecute:

rm **/!(mongodb).log

Por ejemplo:

$ tree
.
├── bar
│   └── baz
│       └── bad
│           ├── file1
│           ├── file2
│           ├── file3.log
│           ├── file4.log
│           ├── file5.log
│           └── mongodb.log
├── file1
├── file2
├── file3.log
├── file4.log
├── file5.log
└── mongodb.log

$ rm **/!(mongodb).log

$ tree
.
├── bar
│   └── baz
│       └── bad
│           ├── file1
│           ├── file2
│           └── mongodb.log
├── file1
├── file2
└── mongodb.log

3 directories, 6 files

De man bash:

Si el extglob shell está habilitada la opción de utilizar los shopt builtin, varios extendido patrón de coincidencia de los operadores son reconocidos. En el descripción siguiente, un patrón de la lista es una lista de uno o más patrones separados por |. Compuesto de patrones puede ser formada utilizando una o más de los siguientes sub-patrones:

      ?(pattern-list)
             Matches zero or one occurrence of the given patterns
      *(pattern-list)
             Matches zero or more occurrences of the given patterns
      +(pattern-list)
             Matches one or more occurrences of the given patterns
      @(pattern-list)
             Matches one of the given patterns
      !(pattern-list)
             Matches anything except one of the given patterns

 

globstar

Si, el patrón ** utilizado en una vía de expansión contexto coincidirá con todos los archivos y cero o más directorios y subdirectorios. Si el patrón es seguido por un /, sólo los directorios y subdirectorios partido.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: