GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Comando para crear directorios de destino numerados secuencialmente y mover archivos por lotes?

Estoy creando un video de lapso de tiempo dividiendo un video en imágenes individuales, usando G'MIC a través de la línea de comando para promediar cada 7 cuadros, luego envío los resultados a nuevas imágenes que darán como resultado los cuadros para el lapso de tiempo (de esta manera obtengo video libre de ruido que se ve muy bien). Como puede imaginar, tengo muchos marcos:varios miles de imágenes individuales en un directorio, nombradas secuencialmente (imagen1.tiff, imagen2.tiff, etc. ). Encontré un script que funciona perfectamente para mover los archivos, una vez...

k=1; find source/ -type f | while read file; do
     [[ k++ -le 7 ]] && mv "$file" target/ 
done 

Lo que necesito ahora es hacer este script

  1. repetir hasta que todos los archivos se muevan y
  2. cree directorios de destino numerados secuencialmente (1, 2, 3, etc.) a medida que avanza, así termino con varios cientos de directorios, cada uno con 7 imágenes dentro.

Solo para aclarar, el directorio 1 debe contener imágenes 1-7, el directorio 2 debe contener imágenes 8-14, etc.

Cualquier ayuda es muy apreciada, estoy bastante atascado con este.

Respuesta aceptada:

El siguiente script (python) crea subcarpetas y organiza sus archivos en las carpetas:

Además:

  • La secuencia de comandos calcula la cantidad de carpetas y agrega ceros a la izquierda de los nombres de las carpetas para una clasificación adecuada (ya que mencionó miles de archivos, es decir, cientos de carpetas)
  • La cantidad de archivos por carpeta puede variar, dependiendo de su configuración en el encabezado de la secuencia de comandos

El script asume:

  • Todos los archivos tienen una extensión, todos los archivos tienen la misma extensión
  • Tus archivos se llaman image1.tiff , image2.tiff etc. (sin ceros a la izquierda).

El guión

#!/usr/bin/env python3
import os
import math
import shutil
#---
directory = "/path/to/files"      # path to your files
n_perfolder = 7                   # number of files per sub folder
#--
# creating file list, extension
f_list = os.listdir(directory); ext = f_list[0].split(".")[-1]
# calculate number of folders
n_folders = math.ceil(len(f_list)/n_perfolder)
# creating folder names, including leading zeros
folders = [str(fn+1) for fn in range(n_folders)]
fl_names = [(len(max(folders, key=len))-len(fl))*"0"+fl for fl in folders]
# creating folders and allocate files 
for i in range(len(fl_names)):
    mkfolder = directory+"/"+fl_names[i]
    if not os.path.exists(mkfolder):
        os.makedirs(mkfolder)
        r = range(i*n_perfolder+1, i*n_perfolder+n_perfolder+1)
        for n in r:
            try:
                file = directory+"/"+"image"+str(n)+"."+ext
                target = mkfolder+"/"+"image"+str(n)+"."+ext
                shutil.copyfile(file, target)
            except FileNotFoundError:
                pass

Cómo usar

Copie el script en un archivo vacío, en la sección principal, configure el directorio para sus archivos y la cantidad de archivos por subdirectorio, guárdelo como organize.py .

Ejecútelo con el comando:

python3 /path/to/organize.py

Nota

Si desea mover los archivos en lugar de copiarlos, reemplace la línea:

shutil.copyfile(file, target)

por:

shutil.move(file, target)

(¡cuidado con la sangría!)

Relacionado:¿Cómo configurar el color/patrón de fondo en una ventana de Nautilus?
Ubuntu
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Renombrar archivos por lotes en la línea de comandos y Xargs

  3. ¿Cómo muevo archivos y directorios a la carpeta principal en Linux?

  4. ¿Mover un rango de archivos numerados?

  5. Cómo mover todos los archivos y carpetas mediante el comando mv

Copie archivos y cree directorios de destino al mismo tiempo

3 formas de encontrar archivos y directorios en Linux

Cómo cambiar el nombre de archivos y directorios en Ubuntu 20.04

Cómo ver y crear archivos y directorios ocultos en Linux

4 formas de transferir archivos y directorios en Linux

Comando Stat:mostrar atributos de archivos y directorios