Classer fichiers dans des dossiers en fonction de leur nom

magicPDF

abracadabrantesque
Modérateur
Club iGen
5 Décembre 2007
7 921
848
43.93 N / 4.84 E
abracadabrapdf.net
Bonjour,

Dans un processus Automator j'utilise un AppleScript qui me classe des fichiers (en vrac) dans des sous-dossiers, en créant chaque sous-dossier d'après le nom du fichier (sans l'extension) et en plaçant ledit fichier dans le sous-dossier ainsi créé.

(Le fichier RIRI.pdf est placé dans le sous-dossier RIRI, le fichier FIFI.pdf est placé dans le sous-dossier FIFI, le fichier TITI.pdf est placé dans le sous-dossier TITI, etc.)

Voici le script utilisé :
Bloc de code:
tell application "Finder"
	set selected to selection
	set current_folder to item 1 of selected
	set mlist to every file of current_folder
	repeat with this_file in mlist
		set cur_ext to name extension of this_file
		set new_name to text 1 thru -((length of cur_ext) + 2) of (name of this_file as text)
		set new_folder to make new folder with properties {name:new_name} at current_folder
		move this_file to new_folder
	end repeat
end tell


Maintenant ce que je voudrais c'est faire presque la même chose mais en ne se basant que sur les 4 premières lettres du nom, c'est-à-dire que les fichiers RIRI.pdf, RIRI 1.pdf, RIRI 2.pdf, etc. soient tous placés dans le sous-dossier RIRI, même chose pour FIFI, TITI et les autres.

Après de nombreuses heures de Googolisation je ne trouve pas de solution à mon (faible) niveau.
Merci de m'aider ou de m'inspirer.
:zen:
 
Bonjour,

Comme ceci
Bloc de code:
tell application "Finder"
	set current_folder to item 1 of (get selection)
	repeat with this_file in (get files of current_folder)
		set new_name to text 1 thru 4 of (get name of this_file)
		if not (exists folder new_name in current_folder) then
			make new folder with properties {name:new_name} at current_folder
		end if
		move this_file to folder new_name of current_folder without replacing
	end repeat
end tell
 
Alors là… Chapeau !
Merci, si jamais tu as besoin d'un PDF pour toi ce sera gratuit.
:zen:

---------- Nouveau message ajouté à 19h53 ---------- Le message précédent a été envoyé à 19h03 ----------

Après test approfondi il apparait (forcément, mais je n'ai pas l'esprit programmatique) que le fichier d'origine, celui qui a exactement le même nom que le sous-dossier, se retrouve lui aussi placé dans le sous-dossier portant son nom, y aurait-il moyen de le replacer dans le dossier parent ou bien à la corbeille ?

Priere.gif
 
Dernière édition:
Bonsoir,


Pour que le fichier d'origine ne se déplace pas, c'est comme ceci.
Bloc de code:
tell application "Finder"
	set current_folder to item 1 of (get selection)
	repeat with this_file in (get files of current_folder)
		tell this_file to set {t_Ext, tName} to {name extension, name}
		set tLength to (count tName) - ((count t_Ext) + 1)
		if tLength > 4 then
			set new_name to text 1 thru 4 of tName
			if not (exists folder new_name in current_folder) then
				make new folder with properties {name:new_name} at current_folder
			end if
			move this_file to folder new_name of current_folder without replacing
		end if
	end repeat
end tell

Pour placer le fichier d'origine à la corbeille, c'est comme ceci.
Bloc de code:
tell application "Finder"
	set current_folder to item 1 of (get selection)
	repeat with this_file in (get files of current_folder)
		tell this_file to set {t_Ext, tName} to {name extension, name}
		set tLength to (count tName) - ((count t_Ext) + 1)
		if tLength > 4 then
			set new_name to text 1 thru 4 of tName
			if not (exists folder new_name in current_folder) then
				make new folder with properties {name:new_name} at current_folder
			end if
			move this_file to folder new_name of current_folder without replacing
		else if tLength = 4 then
			delete this_file -- place à la corbeille le fichier dont le nom est le même que le sous dossier
		end if
	end repeat
end tell


---------- Nouveau message ajouté à 20h20 ---------- Le message précédent a été envoyé à 20h18 ----------

Alors là… Chapeau !
Merci, si jamais tu as besoin d'un PDF pour toi ce sera gratuit.
Merci beaucoup pour cette proposition