IPB

Bienvenue invité ( Connexion | Inscription )

> Automatisation : ouverture et tri de fichiers si endommagé [Résolu]
Options
zorkwolf
posté 4 Apr 2020, 12:16
Message #1


Nouveau Membre


Groupe : Membres
Messages : 22
Inscrit : 5 Sep 2012
Membre no 178 669



Bonjour tout le monde,

Tout d'abord, je précise que je n'y connais absolument rien en automatisation, scripts, etc. et que je ne connais donc pas du tout les logiciels/outils qui me permettraient de faire ce que je souhaite faire. Je connais Automator de nom et qui a l'air très simple d'utilisation, mais à première vue, il ne m'aidera pas de le cas présent.
Je cherche donc une autre solution mais j'aurais besoin d'un coup de pouce pour trouver l'outil qui m'aidera à régler mon problème.

Pour résumer :
J'aimerais automatiser le tri de 18000 fichiers .ALS (fichiers Ableton Live) potentiellement endommagés. Si le logiciel signale le fichier comme étant endommagé, alors il est transféré dans un autre dossier. Sinon, rien n'est fait.

Le contexte :
J'ai fait une mise à jour de mon OS en clean install. J'ai sauvegarder les fichiers que je souhaitais sauver par un habile copié-collé (oui, je n'ai pas utilisé Time Machine, que j'utilise habituellement, pour des raisons indépendantes de Time Machine en lui-même smile.gif ). Finder m'a proposé de fusionner certains dossiers, mais je me suis rendu compte que ça n'avait pas fonctionné comme je m'y attendais et malheureusement, je n'ai pas pris la peine de vérifier avant de formater mon disque dur.
Je tente une récupération avec Disk Drill. Parmi les fichiers que je souhaite récupérer, il y a des fichiers .ALS qui sont utilisés par le logiciel de MAO Ableton Live. Disk Drill en a trouvé 18000 alors qu'à la base, je devais en avoir une 100 aine au maximum. Je teste les 50 premiers fichiers, à l'ouverture, Ableton Live me les signalent tous comme étant endommagés. L'opération est fastidieuse et j'aimerais pouvoir automatiser la tâche.

Ce que je souhaite faire pour chaque fichier :
1- Ouvrir le fichier avec Ableton Live.
2- a- A l'ouverture, si le fichier est endommagé, Ableton Live le signale par le message suivant :

2- b- Sinon le fichier s'ouvre normalement.
3- a- Si le fichier est signalé comme étant endommagé, le fichier est transféré vers un dossier.
3- b- Si le fichier est ouvert correctement, rien n'est fait.

Si vous avez une autre méthode à proposer, je suis totalement preneur !! biggrin.gif

J'allais poster dans la section "Technologies Apple" mais j'ai l'impression que ça correspond mieux ici. N'hésitez pas à me dire si je dois changer le post de section.

Merci d'avance pour vos retours,

zorkwolf

Ce message a été modifié par zorkwolf - 4 Apr 2020, 12:19.
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
ades
posté 10 Dec 2020, 12:54
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 018
Inscrit : 23 Nov 2002
Membre no 4 808



bonjour, déterrage…J'ai un peu le meme blem, des fichiers récupérés sur disque effacé, beaucoup de fichiers, et plusieurs applications en jeu …Pour les images c'est assez simple, faut juste dédoublonner, c'est fait et les fichiers abimés sont directement visible avec n'importe quel catalogueur.
Par contre j'ai des docs FP3, FP5 et FP7 (filemaker pro), pdf ; doc et d'autres…J'ai essayé d'adapter le script, mais je ne suis pas doué.Je voudrais juste savoir ce qu'il faut modifier pour adapter, pour les '.doc' par exemple, les fichiers sont dans un dossier nommé 'docs' du disque '1001' et les applications dans le dossier éponyme du disque 'Mini_sys'.Merci d'avance


--------------------
MBP 15 unibody (circa 2010) 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint parti en vacances sans autorisation
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.7.1 dual boot Sequoia 15 (lent sur ce mac) ; OpencoreLegacy Patcher 2.1.2parti le rejoindre, sans doute un p'tit ménage…MacMini M1 8-256
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 11 Dec 2020, 18:24
Message #3


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 989
Inscrit : 22 Aug 2002
Lieu : 06220 VALLAURIS
Membre no 3 217



Citation (ades @ 10 Dec 2020, 13:54) *
bonjour, déterrage…J'ai un peu le meme blem, des fichiers récupérés sur disque effacé, beaucoup de fichiers, et plusieurs applications en jeu …Pour les images c'est assez simple, faut juste dédoublonner, c'est fait et les fichiers abimés sont directement visible avec n'importe quel catalogueur.
Par contre j'ai des docs FP3, FP5 et FP7 (filemaker pro), pdf ; doc et d'autres…J'ai essayé d'adapter le script, mais je ne suis pas doué.Je voudrais juste savoir ce qu'il faut modifier pour adapter, pour les '.doc' par exemple, les fichiers sont dans un dossier nommé 'docs' du disque '1001' et les applications dans le dossier éponyme du disque 'Mini_sys'.Merci d'avance



Je vais essayer de concocter une version testant les pdf avec Aperçu (pour Applescript ça s'écrit "Preview").
Comme je vous l'ai indiqué dans un message perso, actuellement je n'ai pas les idées bien claires mais je devrais m'en sortir rapidement.
Pour les fichiers FileMaker ou Merdosoft il vous faudra adapter le code destiné à Aperçu car je n'ai pas ces applications.
Heureusement, il me semble qu'en cas de fichier corrompu elles se comportent plus ou moins comme Aperçu ce qui est plus facile à traiter que le cas Ableton.

Voilà qui semble OK pour Aperçu.

Code
----------------------------------------------------------------
use AppleScript version "2.5"
use framework "Foundation"
use scripting additions

-- Yvan KOENIG (VALLAURIS, France) lundi 6 avril 2020  14:25:22
-- 2020/12/11 traitement des PDFs avec Preview (Aperçu)

----------------------------------------------------------------

property |⌘| : a reference to current application

my Germaine()

on Germaine()
    -- définition du chemin d'accès à l'application à employer
    set usedApp to ((path to applications folder as string) & "Preview.app:") as «class furl» -- Éditer le nom de l'application
    set usedProcess to "Preview" -- Éditer le nom du processus
    
    -- définition de l'extension des fichiers à analyser
    set theExt to "pdf"
    -- set theExtUpper to "PDF" -- inutile
    set p2d to path to desktop
    -- définition du chemin d'accès au dossier contenant les fichiers à analyser
    set sourceFolder to (choose folder "Sélectionner le dossier à analyser" default location p2d) as string
    -- définition du chemin d'accès au dossier de stockage des corrompus
    set junkFolder to (choose folder "Sélectionner le dossier où ranger les corrompus" default location p2d) as string -- Édité pour ne plus utiliser un dossier qui peut ne pas exister
    try
        set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:") as «class furl»
        set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red"
    on error
        set red_loc to "rouge" -- version française du nom de couleur
    end try
    
    set fileManager to a reference to |⌘|'s NSFileManager's defaultManager()
    
    set skipsPackageDescendants to |⌘|'s NSDirectoryEnumerationSkipsPackageDescendants as integer --> 2
    set skipsHiddenFiles to |⌘|'s NSDirectoryEnumerationSkipsHiddenFiles as integer --> 4
    set theOptions to skipsPackageDescendants + skipsHiddenFiles
    
    set NSURLIsDirectoryKey to |⌘|'s NSURLIsDirectoryKey
    set keysToRequest to {NSURLIsDirectoryKey}
    
    tell me to display notification "Commence à scanner le dossier" & linefeed & (current date)
    
    set theURL to (|⌘|'s NSArray's arrayWithObject:(sourceFolder as «class furl»))'s firstObject()
    -- test désactivé parce que, étant défini par Choose folder, le dossier existe
    -- if (theURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & sourceFolder & "” isn't available."
    set junkURL to (|⌘|'s NSArray's arrayWithObject:(junkFolder as «class furl»))'s firstObject()
    -- test désactivé parce que, étant défini par Choose folder, le dossier existe
    -- if (junkURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & junkFolder & "” isn't available."
    
    set allURLs to (fileManager's enumeratorAtURL:theURL includingPropertiesForKeys:keysToRequest options:theOptions errorHandler:(missing value))'s allObjects()
    if allURLs is equal to missing value then error (theError's localizedDescription() as text)
    
    tell me to display notification "trouvé " & (count allURLs) & " URLs." & linefeed & (current date)
    -- ATTENTION, les formats sont sensibles à la casse
    -- set theFormat to "(self.pathExtension =[c] '" & theExt & "') OR (self.pathExtension =[c] '" & theExtUpper & "')" -- pour lister les fichiers dont le nom se termine par theExt
    -- OOPS, avec [c] le format n'est PAS sensible à la casse.
    set theFormat to "(self.pathExtension =[c] 'pdf')" -- pour lister les fichiers dont le nom se termine par theExt
    set thePredicate to |⌘|'s NSPredicate's predicateWithFormat:theFormat
    set fichiersReconnus to (allURLs's filteredArrayUsingPredicate:thePredicate)
    tell me to display notification "trouvé " & (count fichiersReconnus) & " fichiers ." & theExt & "." & linefeed & (current date)
    repeat with aURL in fichiersReconnus
        set aFurl to aURL as «class furl»
        tell application "Finder" to open aFurl using usedApp
        
        tell application "System Events"
            repeat -- Attends que l'application soit ouverte
                if exists process usedProcess then exit repeat
                delay 0.1
            end repeat
            tell process usedProcess
                set frontmost to true -- Assure que le process va pouvoir exécuter les actions
                repeat
                    set nbWindows to count windows
                    if nbWindows > 0 then exit repeat
                    delay 0.1
                end repeat
                set theSubroles to subrole of windows
                --> {"AXDialog", "AXUnknown", "AXUnknown"} -- pour un document corrompu
                --> {"AXStandardWindow", "AXUnknown"} -- pour un document sain
                if theSubroles contains "AXDialog" then
                    -- attribue un double tag
                    set {theResult, theError} to (aURL's setResourceValue:{red_loc, theExt & " corrompu"} forKey:(current application's NSURLTagNamesKey) |error|:(specifier))
                    -- déplace le fichier
                    (my moveFromURL:aURL toFolder:junkURL nameExtension:theExt)
                else
                    -- fichier valide
                end if
                -- Arrive ici dans les deux cas pour fermer les fenêtres
                try -- En principe on ne devrait pas générer d'erreur mais je joue la sécurité
                    set nbWindows to count windows
                    repeat 5 times -- En principe, nbWindows times suffirait mais je joue la sécurité
                        if not (exists window 1) then exit repeat -- plus propre, ne génère pas de message d'erreur
                        tell window 1
                            if exists button 1 then
                                click button 1
                            else
                                keystroke return
                            end if
                        end tell
                        delay 0.2
                    end repeat
                on error errmsg number errNbr
                    -- tell application "Finder" to display dialog errmsg -- "Erreur dans System Events : Il est impossible d’obtenir process \"Live\"."
                end try
            end tell -- process "Live"
        end tell -- "System Events"…
    end repeat
    
end Germaine

#=====

on moveFromURL:sourceURL toFolder:junkURL nameExtension:theExt
    set theFileManager to |⌘|'s NSFileManager's |defaultManager|()
    set origName to sourceURL's |lastPathComponent|() as string --> "trucmuche.ALS"
    tell (current date) to set stamp to (((its year) * 10000 + (its month) * 100 + (its day)) as text) & "_" & text 2 thru -1 of ((1000000 + (its hours) * 10000 + (its minutes) * 100 + (its seconds)) as text)
    -- par sécurité, intercale date-time pour éviter doublons
    set destName to (text 1 thru -5 of origName) & "_" & stamp & "." & theExt --> "trucmuche_20200404_154332.ALS"
    set destinationURL to junkURL's URLByAppendingPathComponent:destName
    set {theResult, theError} to (theFileManager's moveItemAtURL:sourceURL toURL:destinationURL |error|:(reference))
end moveFromURL:toFolder:nameExtension:

#=====


Édité pour traiter les extensions minuscules ou majuscules.
Re-édité car la modification précédente était inutile.

Ce message a été modifié par KOENIG Yvan - 13 Dec 2020, 16:26.
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 18th July 2025 - 13:26