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
- repetir hasta que todos los archivos se muevan y
- 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?