Ich erstelle ein Zeitraffer-Video, indem ich ein Video in einzelne Bilder aufteile, G'MIC über die Befehlszeile verwende, um alle 7 Frames zu mitteln, und dann die Ergebnisse in neue Bilder auszugeben, die zu den Frames für den Zeitraffer führen (so bekomme ich rauschfreies Video, das großartig aussieht). Wie Sie sich vorstellen können, habe ich viele Frames – mehrere tausend einzelne Bilder in einem Verzeichnis, die nacheinander benannt sind (image1.tiff, image2.tiff usw. ). Ich habe ein Skript gefunden, das perfekt funktioniert, um die Dateien zu verschieben – einmal…
k=1; find source/ -type f | while read file; do
[[ k++ -le 7 ]] && mv "$file" target/
done
Was ich jetzt brauche, ist dieses Skript zu erstellen
- Wiederholen Sie sich, bis alle Dateien verschoben sind und
- Erstellen Sie nach und nach fortlaufend nummerierte Zielverzeichnisse (1, 2, 3 usw.), sodass ich am Ende mehrere hundert Verzeichnisse mit jeweils 7 Bildern darin habe.
Nur zur Verdeutlichung, Verzeichnis 1 sollte die Bilder 1-7 enthalten, Verzeichnis 2 sollte die Bilder 8-14 usw. enthalten.
Jede Hilfe wird sehr geschätzt, ich stecke ziemlich fest mit dieser.
Akzeptierte Antwort:
Das folgende (Python-)Skript erstellt Unterordner und organisiert Ihre Dateien in den Ordnern:
Zusätzlich:
- Das Skript berechnet die Anzahl der Ordner und fügt führende Nullen zu den Ordnernamen hinzu, um eine korrekte Sortierung zu gewährleisten (da Sie Tausende von Dateien erwähnt haben, was Hunderte von Ordnern bedeutet)
- Die Anzahl der Dateien pro Ordner kann je nach Einstellung im Kopf des Skripts variieren
Das Skript geht davon aus:
- Alle Dateien haben eine Erweiterung, alle Dateien haben die gleiche Erweiterung
- Ihre Dateien heißen
image1.tiff
,image2.tiff
etc (keine führenden Nullen).
Das Skript
#!/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
Verwendung
Kopieren Sie das Skript in eine leere Datei, legen Sie im Head-Bereich das Verzeichnis auf Ihre Dateien und die Anzahl der Dateien pro Unterverzeichnis fest und speichern Sie es als organize.py
.
Führen Sie es mit dem Befehl aus:
python3 /path/to/organize.py
Hinweis
Wenn Sie umziehen möchten statt die Dateien zu kopieren, ersetzen Sie die Zeile:
shutil.copyfile(file, target)
von:
shutil.move(file, target)
(Einzug beachten!)
Verwandte:Wie stelle ich die Hintergrundfarbe/das Hintergrundmuster in einem Nautilus-Fenster ein?