GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminar todos menos 1000 archivos aleatorios en un directorio

Eliminar todos menos 1000 archivos aleatorios en un directorio

Código:

find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm

Explicación:

  1. Lista de todos los archivos en /path/to/dir con find;<último>
  2. print0 :usa \0 (carácter nulo ) como delimitador de línea; por lo que las rutas de archivo que contienen espacios/nuevas líneas no rompen el script
  3. Reorganizar la lista de archivos con sort;<último>
  4. -z :usa \0 (carácter nulo) como delimitador, en lugar de \n (una nueva línea)
  5. -R :orden aleatorio
  6. Elimine las primeras 1000 líneas de la lista aleatoria con tail;<último>
  7. -z :trate la lista como delimitada por cero (igual que con sort )
  8. -n +1001 :mostrar líneas a partir de 1001 (es decir, omitir las primeras 1000 líneas)
  9. xargs -0 rm - eliminar los archivos restantes;
    • -0 :delimitado por cero, de nuevo

Por qué es mejor que la solución quijotesca*:

  1. Funciona con nombres de archivo que contienen espacios/nuevas líneas.
  2. No intenta crear ningún directorio (que puede que ya exista, por cierto)
  3. No mueve ningún archivo, ni siquiera toca los 1000 "archivos de la suerte" además de enumerarlos con find .
  4. Evita perder un archivo en caso de que la salida de find no termina con \n (nueva línea) por alguna razón.

* - crédito a quijotesco por | sort -R | head -1000 , me dio un punto de partida.


Linux
  1. ¿Hacer que todos los archivos nuevos en un directorio sean accesibles para un grupo?

  2. ¿Cómo eliminar todos los archivos con una extensión particular en una carpeta particular?

  3. Obtener todos los archivos excepto los archivos en matriz:¿Bash?

  4. ¿Usar Buscar para encontrar cierto directorio y eliminar todos los archivos excepto un directorio?

  5. Encuentre todos los archivos de cero bytes en directorios y subdirectorios

Bash script para eliminar todos los archivos excepto N cuando se ordenan alfabéticamente

Cómo cambiar todas las apariciones de una palabra en todos los archivos de un directorio

comando de linux para vaciar todos los archivos de un directorio

Eliminar el repositorio de Git, pero conservar todos los archivos

Elimine todos los archivos excepto los 3 más nuevos en bash script

¿Cómo eliminar todos los archivos en un directorio excepto algunos?