¿Cómo se pueden eliminar todos los archivos excepto uno de un directorio?

¿Cómo se pueden eliminar todos los archivos excepto uno de un directorio?

Necesito eliminar todos los archivos, excepto uno (su nombre está definido), de un directorio determinado.

¿Cómo puedo hacer esto desde la terminal en OS X? ¿Puedo hacer esto con un solo comando?

Respuesta1

shopt -s extglob && rm !(non_delete_file)

o

rm -f !(non_delete_file)

o

find . ! -name non_delete_file -delete

Tenga en cuenta que el comando anterior findfuncionará de forma recursiva: eliminará todos los archivos y directorios en el directorio actual y en todos los subdirectorios. Si eso es un problema, use -type f(para hacer coincidir solo archivos) y -maxdepth 1(para hacer coincidir cosas solo en el directorio actual, ignorando los subdirectorios)

find . -type f -maxdepth 1 ! -name non_delete_file -delete

Respuesta2

  1. mueva el archivo que desea conservar a algún lugar fuera del directorio
  2. elimina todo lo que hay en el directorio usando tu método favorito
  3. mueva el archivo que desea conservar nuevamente al directorio

No es exactamente "alta tecnología", pero es mucho más difícil eliminar accidentalmente el archivo que desea conservar si utiliza este método.

Obviamente, este enfoque falla si el archivo necesita existir continuamente en el directorio mientras ocurre toda la matanza.

Respuesta3

Intentar

rm `ls | grep -v '^defined$'`

información relacionada