"tar -czf" para los primeros 5 mil archivos

"tar -czf" para los primeros 5 mil archivos

Tengo un directorio con demasiados archivos.

Quiero comprimir los primeros 5 mil archivos en ese directorio para convertirlos en file.tar.gz5001 - 10000... y así sucesivamente.

¿cómo hacerlo?

Respuesta1

Utilice ls para generar la lista de nombres y head y tail para filtrarlos. Aquí hay una frase que lo hace en un bucle. Necesitará saber la cantidad de archivos en el directorio (ls | wc -l se lo dirá).

for ii in $(seq -w 5000 5000 NUMBER_OF_FILES) ; do echo $ii ; ls | head -n $ii | tail -n 5000 | tar -f ../ARCHIVE_FILE_$ii.tar.gz -czv -T - ; done

Reemplaza los bits en mayúsculas con lo que quieras.

Respuesta2

Este script agrega gradualmente todos los archivos al archivo y lo numera. Cambie el nombre de ARCHIVE_NAME y '5000'.

$ COUNT_MOD=0; for i in *; do tar -r -f ARCHIVE_NAME`expr $COUNT_MOD / 5000`.tar $i; ((COUNT_MOD++)) ; done

Este script no está optimizado, por lo que existen algunas reglas:

  1. ARCHIVE_NAME# no debe existir al iniciar este script, por lo que si algo falla, realice un 'rm ARCHIVE_NAME*'.
  2. El script trata una entrada de directorio como 1 entrada, pero no como "tar". Tar irá al directorio y agregará todos los archivos de forma recursiva, y es posible que termine con más de 5000 archivos en un archivo.
  3. Los archivos comprimidos no se pueden actualizar, omití '-z', lo siento :-)

Respuesta3

Puede crear un conjunto de archivos que enumeren cada uno de ellos 5000 nombres de archivo y usarlos con los argumentos -T para tar. Algo como esto podría funcionar:

ls -1 | split -l 5000 - tarlist
count=0
for f in tarlist*
do
    tar -czf save.$count.tar.gz -T $f
    count=`expr $count + 1`
done

información relacionada