GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo excluir algunos archivos del mecanismo de expansión de nombre de archivo en Bash?

Tengo directorios del sistema de archivos de ubuntu en el directorio raíz y accidentalmente copié cientos de archivos en el directorio raíz.

Intuitivamente traté de eliminar los archivos copiados excluyendo el sistema de archivos como

rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./.

pero no funciona. ¿Cuál es la forma correcta de excluir algunos directorios mientras se elimina todo?

EDITAR:¡Nunca pruebes ninguno de los comandos aquí sin saber qué hacer!

Respuesta aceptada:

Dado que está utilizando bash :

shopt -s extglob
echo rm -rf ./!(bin|sbin|usr|...)

Recomiendo agregar echo al comienzo de la línea de comando cuando está ejecutando algo que potencialmente puede explotar todo el sistema. Quítelo si está satisfecho con el resultado.

Nota:el comando anterior no eliminará los archivos ocultos (aquellos cuyo nombre comienza con un punto). Si desea eliminarlos también, active también dotglob opción:

shopt -s dotglob

Linux
  1. Cómo excluir archivos de cierto tamaño de la copia en Linux

  2. ¿Cómo eliminar recursivamente los permisos de ejecución de los archivos sin tocar las carpetas?

  3. ¿Es posible excluir algunos archivos de Rm -rf?

  4. ¿Cómo elimino archivos de la papelera en Ubuntu?

  5. ¿Cómo eliminar caracteres no válidos de los nombres de archivo?

Bash scripting:cómo leer datos de archivos de texto

Cómo quitar un comando del historial en Linux

Cómo quitar (^M) caracteres de un archivo en Linux

Cómo quitar espacios de los nombres de archivo en Linux

Cómo eliminar paquetes de Ubuntu y Debian

¿Cómo elimino archivos de zona de mi servidor?