Quiero utilizar parallel
para dividir muchos directorios en subdirectorios. Por ejemplo, tengo 1.000.000 de directorios con contenido, pero es demasiado para un directorio, por lo que quiero crear 10 directorios en el directorio principal y mover en cada uno de ellos 100.000 directorios originales.
Ya probé ls -tr|parallel -n100000 mkdir "dir_{#}"\;mv {} "dir_{#}"
el comando, pero mueve solo ~10 000 a un subdirectorio (a veces ~6200, a veces ~12 500) y crea demasiados subdirectorios, a veces 10 veces más de lo que necesito. Por supuesto, no necesito exactamente 100 000 directorios en cada subdirectorio, pueden ser 101 000 o 98 500 directorios, debería ser un número en el rango de 100 000.
Entonces, ¿cómo puedo hacer esto usando parallel
?
Respuesta1
ÑUparallel
solución:
parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}' ::: *
j N
- número de puestos de trabajo. EjecuteN
trabajos en paralelo. En su caso, ejecutaremos 10 trabajos para distribuir (mover) todos los directorios entre los 10 directorios principales nuevos.-n100000
- utilizar como máximo100000
argumentos (nombres de directorio) por línea de comando{#}
- número de secuencia del trabajo a ejecutar. Esta cadena de reemplazo será reemplazada por el número de secuencia del trabajo que se está ejecutando.::: arguments
- utilizararguments
desde la línea de comando como fuente de entrada en lugar de stdin (entrada estándar)
Para procesar directorios (nombres de directorio) ordenados por hora de modificación, utilice la siguiente canalización:
ls -dtr * | parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}'