Lo haría así:
find . ! -name <filename> -delete
para que esto funcione con carpetas, debes reemplazar el delete con un exec rm -r
find . ! -name <filename> -exec rm -rv {} \;
Esto se descompone en
find = buscar
. = en el directorio de trabajo actual, puede reemplazar . con una ruta, como ~/Documents/
! = not
-name = nombre
<filename> = archivo
-exec = ejecutar
rm -rv = eliminación detallada
{} = resultados del hallazgo
\; = cerrar la ejecución
Encuentre todos los archivos y carpetas en su carpeta de trabajo, que no tengan el nombre filename y luego ejecute el comando eliminar en los resultados.
Primero debes hacer una ejecución en seco sin la opción de eliminar:
find . ! -name <filename>
Este comando le proporciona una lista de todos los archivos y carpetas en su directorio de trabajo que no se denominan <filename> . Al agregar -delete o -exec rm -rv {} \; , se eliminarán estos archivos y la carpeta (la versión exec ).
También puedes usar
rm -v [^filename]
para carpetas agrega -r
rm -rv [^filename]
De alguna manera me siento más cómodo usando la opción find . Principalmente porque puedes hacer una carrera en seco. De cualquier manera, comenzaría con una carpeta ficticia y probaría ambas opciones.