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.