アストラルプリズム

PC、スマホ、ゲームなどの備忘録と日記

GIMPでファイルを名前順に分け、かつ指定した容量ごとにフォルダーに分けるプラグイン

GIMPでやる必要あるのか?
自分が使う用事があって作った。拡張子ごとに分けれる。というか同じ拡張子ごとにしか分けれない仕様にしてしまった。
ファイル名にハイフンかアンダーバーがあればそれもファイルを分けるか選択することができる。
f:id:katsumi3:20220403195520p:plain

インストール方法

以下をコピペしてファイル名をorganize_files_by_capacity.pyにしてutf-8で保存後、GIMPプラグインフォルダーに入れる。
GIMPのメニューの「ファイル」→「organize files by capacity」をクリックすると動作する。
プラグインフォルダーはGIMPを起動し「編集」→「設定」→「フォルダー」→「プラグイン」で確認の事。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import shutil, os, glob
from gimpfu import *

def organize_files_by_capacity(separation, cap_limit, extension, folder_path):
	if folder_path == "":
		gimp.quit()
	folder_path = folder_path.decode("utf-8")
	p = os.path.join(folder_path, "*" + extension)
	i = 1
	cap = 0	
	if not glob.glob(p):
		gimp.message("指定フォルダーに".decode("utf-8") + extension + "ファイルがありません".decode("utf-8"))
		gimp.quit()
	else:
		if separation == True:
			first_file_name = glob.glob(p)[0]
			first_file_basename = os.path.splitext(os.path.basename(first_file_name))[0]
			if "_" in first_file_basename:
				folder_name = first_file_basename.split("_")[0]
			elif "-" in first_file_basename:
				folder_name = first_file_basename.split("-")[0]
			else:
				gimp.message("-か_の区切り文字がありません".decode("utf-8"))
				gimp.quit()
			previous_folder_name = folder_name
			new_path = os.path.join(folder_path , folder_name + "_01")
		else:
			new_path = os.path.join(folder_path, "01")
		os.mkdir(new_path)
	
	for file in glob.glob(p):
		cap = cap + os.path.getsize(file)
		if separation == True:
			folder_name = os.path.splitext(os.path.basename(file))[0]
			if "_" in folder_name:
				now_folder_name = folder_name.split("_")[0]
			elif "-" in folder_name:
				now_folder_name = folder_name.split("-")[0]			
			if cap > cap_limit * 1000:
				i = i + 1
				new_path = os.path.join(folder_path, now_folder_name + "_" + str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)
	
			elif previous_folder_name != now_folder_name:
				gimp.message("folder_name = "+ folder_name)
				gimp.message("previous_folder_name = "+ previous_folder_name)
				i = 1
				new_path = os.path.join(folder_path, now_folder_name + "_" + str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)

			previous_folder_name = now_folder_name
			
		else:
			if cap > cap_limit*1000:
				i = i + 1
				new_path = os.path.join(folder_path,str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)
		
		shutil.move(file,os.path.join(new_path,os.path.basename(file)))


register(
	"organize_files_by_capacity",
	"organize files by capacity",
	"organize files by capacity",
	"katsumi",
	"katsumi",
 	"2022",
	"organize files by capacity",
	"",
	[
		(PF_BOOL, "separation", "-や_で区切られた名前ごとにフォルダーを分ける", True),		
		(PF_INT, "cap_limit", "何容量(kb)でまとめるか?",10000 ),
		(PF_TEXT, "extension", "拡張子を入力",".jpg"),
		(PF_DIRNAME, "folder_path", "フォルダーの場所を指定してください", ""),
	],
	[],
	organize_files_by_capacity,
	menu = "<Image>/File/Open" )
main()