Vytvářím časosběrné video rozdělením videa na jednotlivé snímky, pomocí G'MIC přes příkazový řádek k průměrování každých 7 snímků a poté výstupem výsledků do nových snímků, které povedou ke snímkům pro časosběr (takto dostanu video bez šumu, které vypadá skvěle). Jak si dokážete představit, mám spoustu snímků – několik tisíc jednotlivých obrázků v adresáři, pojmenovaných sekvenčně (image1.tiff, image2.tiff atd. ). Našel jsem skript, který perfektně funguje pro přesun souborů – jednou…
k=1; find source/ -type f | while read file; do
[[ k++ -le 7 ]] && mv "$file" target/
done
Nyní potřebuji vytvořit tento skript
- opakuje se, dokud nejsou přesunuty všechny soubory a
- vytvářejte postupně číslované cílové adresáře (1, 2, 3 atd.), jak to jde, takže nakonec získám několik stovek adresářů, každý se 7 obrázky uvnitř.
Jen pro upřesnění, adresář 1 by měl obsahovat obrázky 1-7, adresář 2 by měl obsahovat obrázky 8-14 atd.
Velmi si vážím jakékoli pomoci, s touto jsem skoro uvízl.
Přijatá odpověď:
Skript (python) níže vytvoří podsložky a uspořádá vaše soubory do složek:
Navíc:
- Skript vypočítá počet složek a přidá k názvům složek úvodní nuly pro správné řazení (protože jste zmínil tisíce souborů, což znamená stovky složek)
- Počet souborů ve složce se může lišit v závislosti na vašem nastavení v záhlaví skriptu
Skript předpokládá:
- Všechny soubory mají příponu, všechny soubory mají stejnou rozšíření
- Vaše soubory se jmenují
image1.tiff
,image2.tiff
atd. (žádné úvodní nuly).
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
Jak používat
Zkopírujte skript do prázdného souboru, v sekci head nastavte adresář na vaše soubory a počet souborů na podadresář, uložte jej jako organize.py
.
Spusťte jej příkazem:
python3 /path/to/organize.py
Poznámka
Pokud se chcete přesunout soubory místo kopírování nahraďte řádek:
shutil.copyfile(file, target)
od:
shutil.move(file, target)
(pozor na odsazení!)
Související:Jak nastavit barvu/vzor pozadí v okně Nautilus?