# Ajouter extension



## Nuche (3 Octobre 2016)

Bonjour à tous...

J'ai un gros problème avec tous un tas de fichiers créés sur Mac depuis de nombreuse années et de tous format (pdf, word, excel, powerpoint, etc...).
Des milliers de fichiers 

La plupart des ces fichiers n'ont pas d'extension, ce qui n'est pas un gros problème sur Mac, mais l'est sur Windows/Linux

Et comme ces fichiers doivent maintenant pouvoir être ouvert sur Mac et Windows, les fichiers sans extension ne s'ouvrent pas !

Existe-t-il une solution pour ajouter les extensions *automatiquement* (avec automator par ex.) en fonction du type de fichiers détecté par OSX ?
_(Je dis bien automatiquement car il y a des milliers de fichiers répartis dans de nombreux nombreux dossiers)_

PS: Cela peut être une solution qui tourne aussi-bien sur OSX/Windows/Linux

Merci !

Philippe


----------



## Locke (3 Octobre 2016)

Nuche a dit:


> Et comme ces fichiers doivent maintenant pouvoir être ouvert sur Mac et Windows, les fichiers sans extension ne s'ouvrent pas !


Oui et non, la présence d'une extension n'est pas obligatoire pour une ouverture.

Qu'il y est une extension ou pas n'est pas le problème. Dans les deux systèmes, il faut déclarer explicitement en faisant cmd+I sur OS X quel est le logiciel qui ouvrira tout le temps ce type de fichier et c'est la même chose sous Windows lorsqu'on fait un clic droit, il suffit d'indiquer quel est le programme qui ouvrira ce fichier.


----------



## Nuche (3 Octobre 2016)

Locke a dit:


> Oui et non, la présence d'une extension n'est pas obligatoire pour une ouverture.
> 
> Qu'il y est une extension ou pas n'est pas le problème. Dans les deux systèmes, il faut déclarer explicitement en faisant cmd+I sur OS X quel est le logiciel qui ouvrira tout le temps ce type de fichier et c'est la même chose sous Windows lorsqu'on fait un clic droit, il suffit d'indiquer quel est le programme qui ouvrira ce fichier.



Oui et Non 
Un utilisateur lamba ne va pas comprendre, donc il faut oublier cette méthode 
(Déjà que lorsque l'on voit des utilisateurs ajouter un "x" au doc pour le convertir en docx, on est pas sorti de l'auberge...)
En plus de cela, le problème et bien plus complexe que ca. Je n'ai pas tout dis 

Les fichiers vont être transférés sur Sharepoint (pas taper, ce n'est pas mon choix), et donc les fichiers inconnus ne pourront pas être reconnu directement dans Sharepoint sans extension. Un document Word ne pourra pas être édité dans Sharepoint si il n'a pas d'extension, et c'est un peu le but de Sharepoint.


----------



## luc1en (3 Octobre 2016)

Bonjour,


Nuche a dit:


> Oui et Non
> Un utilisateur lambda ne va pas comprendre, donc il faut oublier cette méthode
> (Déjà que lorsque l'on voit des utilisateurs ajouter un "x" au doc pour le convertir en docx, on est pas sorti de l'auberge...)


je confirme… galère assurée.


Nuche a dit:


> En plus de cela, le problème et bien plus complexe que ca. Je n'ai pas tout dis
> 
> Les fichiers vont être transférés sur Sharepoint (pas taper, ce n'est pas mon choix), et donc les fichiers inconnus ne pourront pas être reconnu directement dans Sharepoint sans extension. Un document Word ne pourra pas être édité dans Sharepoint si il n'a pas d'extension, et c'est un peu le but de Sharepoint.


Une idée toute théorique, je n'ai jamais eu à le faire concrètement.
Un fichier a souvent dans sa première ligne une signature caractéristique, qu'on peut voir en l'ouvrant avec un éditeur.
Exemple pour les PDF : %PDF-1.4 (le 1.4 change selon la version de PDF).
Pour les .doc et .xls par contre, il faut chercher la signature vers la fin du document.
Exemples
- pour un .doc de 2003 : Word.Document.8
- pour un .xls de 2004 : Microsoft Excel
Parfois, on trouve un mimetype dans l'en-tête du fichier.
Pour ceux qui savent programmer ça, il faudrait établir une table de correspondance signature/extension et l'ajouter en fonction d'une boucle de test. Ce n'est hélas pas mon cas.


----------



## r e m y (3 Octobre 2016)

Si MacOS X reconnait le type de fichiers, on peut trier par type dans le dossier contenant les fichiers, puis on sélectionne, par exemple, tous les fichiers Microsoft Word et on les déplace dans un dossier nommé (toujours un exemple) Word.

Ensuite via le Terminal
cd
puis passer un espace et glisser le dossier "Word" précédemment créé et contenant les fichiers pour en recopier le chemin d'accès, suivi d'Entrée
Enfin taper la commande

for i in *; do mv "$i" "$i.doc"; done

Ca va ajouter l'extension .doc à tous les fichiers ayant été placés dans le dossier "Word"

Recommencer ainsi pour chaque type de fichiers.


----------



## baron (3 Octobre 2016)

Finder > Préférences > Options avancées : Afficher toutes les extensions de fichier.


----------



## r e m y (3 Octobre 2016)

baron a dit:


> Finder > Préférences > Options avancées : Afficher toutes les extensions de fichier.


Ouch... c'est vrai qu'on n'a même pas penser à vérifier ca pour commencer!


----------



## Nuche (4 Octobre 2016)

r e m y a dit:


> Ouch... c'est vrai qu'on n'a même pas penser à vérifier ca pour commencer!



Oui, il faut commencer par le début 
Mais non, ca n'est pas ca

Beaucoup fichiers n'ont pas d'extension. Vous n'imaginez même pas combien 

*luc1en*: J'avais songé à cette solution. Je n'ai pas encore approfondi le sujet mais il me semble être tombé sur des fichiers dont ils étaient impossible de les identifier via sa première ligne. Mais je dois encore étudier la question.

*r e m y*: Si seulement c'était possible, mais t'imagine même pas le nombre de dossiers et de sous-sous-sous-dossiers qu'il y a. C'est juste impossible.

Bien sur si il n'y a pas de solution, on devra migrer les données à la main 
Il y a plus de 500Go de données 

Je me disais que comme macOS reconnait le type de fichiers (la plupart du temps), il y avait moyen de faire un truc automatique.
Je suis peut-être un peu idéaliste et rêveur


----------



## r e m y (4 Octobre 2016)

Je suis convaincu qu'il y a moyen d'automatiser via un AppleScript ou Automator en se basant sur le type de fichier identifié par MacOS X. 
Mais je ne suis pas assez calé pour le proposer. 

(Je pensais que les fichiers allaient être migrés manuellement sur SharePoint pour les repartir dans une nouvelle arborescence de dossiers... )


----------



## Nuche (4 Octobre 2016)

r e m y a dit:


> Je suis convaincu qu'il y a moyen d'automatiser via un AppleScript ou Automator en se basant sur le type de fichier identifié par MacOS X.
> Mais je ne suis pas assez calé pour le proposer.
> 
> (Je pensais que les fichiers allaient être migrés manuellement sur SharePoint pour les repartir dans une nouvelle arborescence de dossiers... )



J'en suis convaincu aussi mais je suis une bille en programmation 

Ils vont être migré automatiquement via les utilitaires SharePoint (Que je ne connais pas).
SharePoint copie l'arborescence (qui a été créé avant ce qui n'a pas été une grande idée selon moi, mais c'est toujours plus facile de le dire après) ainsi que les fichiers et index le toute de manière automatique mais selon des critères assez strictes.
On aura la possibilité de chercher les fichiers toujours en fonction de l'arborescence actuelle mais aussi via les Tags et le contenu du document.


----------



## Deleted member 1099514 (4 Octobre 2016)

Salut

Une piste :
la commande :
*file --mime-type  * *
devrait donner l'extension des fichiers concernées.
Après faut bosser avec un outil style Find et en fonction du type d'extension, renommer les fichiers.


----------



## luc1en (4 Octobre 2016)

Bonjour,


jeanjd63 a dit:


> Salut
> 
> Une piste :
> la commande :
> ...



C'est intéressant, merci.
Voici le résultat de la commande 
	
	



```
file -I 2015-12-21reuniondebureau* >mime2.txt
```


```
2015-12-21reuniondebureau:    application/vnd.oasis.opendocument.text; charset=binary
2015-12-21reuniondebureaupdf: application/pdf; charset=binary
```
Par contre, si on balaye tous les fichiers d'un gros dossier (543 fichiers), le temps d'exécution semble grimper en flèche.


----------



## Nuche (4 Octobre 2016)

jeanjd63 a dit:


> Salut
> 
> Une piste :
> la commande :
> ...



Alors là c'est super intéressant !
Cela a l'air de fonctionner pour les documents Office et les images mais il y a confusion d'extension avec certains types de fichiers:
  .pdf et .ai (illustrator): application/pdf
  .pages, .zip, .key: application/zip
  .rtfd: inode/director
  .fmp12 (Filemaker): application/x-font-ttf

Pour le moment c'est juste un test basique et rapide que j'ai effectué.

Merci a tous de votre aide, c'est vraiment super sympa 
Déjà avec celle-là cela permet de faire un sacré gros tri des documents Office


----------



## Deleted member 1099514 (4 Octobre 2016)

Pour les fichiers compressés, essaie avec la commande :
*file -z --mime-type **


----------



## magicPDF (15 Avril 2022)

Bonjour

J'ai un peu le même problème avec des centaines de fichiers renommés et sans extension, il y a un peu de tout mais principalement des PDF, des JPG et des PNG.
Je cherche un outil capable de détecter le type du fichier et lui affecter une extension.

Si depuis 2016 quelqu'un a trouvé une solution je serais heureux de la connaitre.
Merci.


----------



## zeltron54 (15 Avril 2022)

Bonjour,

Tu peux essayer ce script.
Il te demande de choisir le dossier contenant les fichiers à traiter, puis il traite tous les fichiers du dossier et des sous dossiers...


```
tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers sans extension"
    my inspecter(Chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            if lextension is not "" then
            else
                set nomcourt to nom
            end if
            set chaque_fichier to chaque_fichier as string
            
            if lextension is "" then
                set genre to do shell script "file --mime " & quoted form of POSIX path of chaque_fichier
                set sauv to AppleScript's text item delimiters
                set AppleScript's text item delimiters to {";"}
                set legenre to text item -2 of genre
                set AppleScript's text item delimiters to {"/"}
                set lextens to last text item of legenre
                set AppleScript's text item delimiters to sauv
                
                set newnom to nom & "." & lextens
                
                set name of lefichier to newnom
            end if
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
    
end inspecter
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (15 Avril 2022)

Je précise que le script ne touche pas à la propriété  : extension masquée ou affichée.

Si tu veux qu'elle soit affichée il faut ajouter la ligne : set extension hidden of lefichier to false

ce qui donne le script ci dessous, Mais bien sur il ne traite que les fichiers trouvés sans extension.


```
tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers sans extension"
    my inspecter(Chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            if lextension is not "" then
            else
                set nomcourt to nom
            end if
            set chaque_fichier to chaque_fichier as string
           
            if lextension is "" then
                set genre to do shell script "file --mime " & quoted form of POSIX path of chaque_fichier
                set sauv to AppleScript's text item delimiters
                set AppleScript's text item delimiters to {";"}
                set legenre to text item -2 of genre
                set AppleScript's text item delimiters to {"/"}
                set lextens to last text item of legenre
                set AppleScript's text item delimiters to sauv
               
                set newnom to nom & "." & lextens
               
                set name of lefichier to newnom
                set extension hidden of lefichier to false
            end if
        end repeat
       
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
   
end inspecter
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (15 Avril 2022)

Bonsoir,
Après quelques tests plus poussés, il s'avère que cela ne fonctionne pas sur les fichiers docx et xlsx.
J'ai donc modifié le script pour prendre en compte ces 2 types de fichiers.

Fais quelques tests et dis-moi si tu rencontres d'autres fichiers provoquant des erreurs.


```
tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers sans extension"
    my inspecter(Chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            if lextension is not "" then
            else
                set nomcourt to nom
            end if
            set chaque_fichier to chaque_fichier as string
          
            if lextension is "" then
                set genre to do shell script "file --mime " & quoted form of POSIX path of chaque_fichier
              
                set sauv to AppleScript's text item delimiters
                set AppleScript's text item delimiters to {";"}
                set legenre to text item -2 of genre
                set AppleScript's text item delimiters to {"/"}
                set lextens to last text item of legenre
              
                set AppleScript's text item delimiters to sauv
              
                set nb to count characters of lextens
                if nb > 4 then
                    set AppleScript's text item delimiters to {"."}
                    set dernier to last text item of lextens
                    if dernier = "document" then set lextens to "docx"
                    if dernier = "sheet" then set lextens to "xlsx"
                end if
                
                set lenewfichier to lefichier as string
                set newnom to nom & "." & lextens
                set name of lefichier to newnom
                set lenewfichier to lenewfichier & "." & lextens as alias
                set extension hidden of lenewfichier to false
              
            end if
        end repeat
      
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
  
end inspecter
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## magicPDF (16 Avril 2022)

Merci.
Je pars pour un long pont, je te tiendrai au courant la semaine prochaine.


----------



## zeltron54 (16 Avril 2022)

Ok !  Bon Week end

Attention les fichiers "Pages" et "Numbers" seront vu comme des fichiers "zip" et c'est zip qui leur sera ajouté comme extension.
Je n'ai pas trouvé de solution pour ces fichiers, car même avec un éditeur binaire style HexEdit on ne trouve pas les termes "pages" ou "numbers" dans le fichier...


----------



## zeltron54 (17 Avril 2022)

@magicPDF
Bonjour,

J’ai profité du long pont pour analyser quelques fichiers avec différentes extensions.

Les fichiers qui sont reconnus et traités par le script:
 pdf, jpeg, png, bmp,  mp4, docx, xlsx, flac, rtf, jpg (jpeg), gif, doc, xls, psd,  svg, txt, avi, mkv, mov, mp3, zip, rar, tar, epub, pps et ppt (renommé xxx.pps)


Les fichiers “ai” sont renommés “.pdf” (ils sont renseignés comme tel dans le fichier !)
Les fichiers “numbers” et “pages” sont renommés “.zip”
Les fichier .dmg, fmp12 (filemaker), 4db (sgbd 4d ACI), indd (indesign), pict, cwk,  sont tous vus de la même manière (octet-stream) je les ai renommés "xxx.indd"

Si d’autres type de fichiers sont trouvés, il sera ajouté au nom du fichier le texte vu et  récupéré dans le fichier exemple: (Nom_du_fichier.xxxxxxxxx)

Dis moi si tu as d’autres extensions pour lesquelles tu voudrais vérifier si leurs traitements est possible.

Bon tests…


```
--remet les extensions au nom de fichier
-- sont traités --> pdf, jpeg, png, bmp,  mp4, docx, xlsx, flac, rtf, jpg (jpeg), gif, doc, xls, psd, ai (renommé en pdf), indd, svg, txt, avi, mkv, mov, mp3, zip, rar, tar, epub, pps et ppt (renommé xxx.pps)
--les fichiers Numbers ainsi que les fichiers Pages sont renommés xx.zip
--Attention les fichier .dmg, fmp12 (filemaker), 4db (sgbd 4d ACI), indd (indesign), pict, cwk,  sont tous vus de la même manière je les ai renommés "xxx.indd"

tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers sans extension"
    my inspecter(Chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            if lextension is not "" then
            else
                set nomcourt to nom
            end if
            set chaque_fichier to chaque_fichier as string
           
            if lextension is "" then
                set genre to do shell script "file --mime-type " & quoted form of POSIX path of chaque_fichier
                set sauv to AppleScript's text item delimiters
                set AppleScript's text item delimiters to {"/"}
                set lextens to last text item of genre
               
                set AppleScript's text item delimiters to {"."}
                set dernier to last text item of lextens
                set lextens to dernier
                set AppleScript's text item delimiters to sauv
                if dernier = "document" then set lextens to "docx"
                if dernier = "sheet" then set lextens to "xlsx"
                if dernier = "msword" then set lextens to "doc"
                if dernier = "ms-excel" then set lextens to "xls"
                if dernier = "photoshop" then set lextens to "psd"
                if dernier = "octet-stream" then set lextens to "indd"
                if dernier = "plain" then set lextens to "txt"
                if dernier = "x-msvideo" then set lextens to "avi"
                if dernier = "x-matroska" then set lextens to "mkv"
                if dernier = "quicktime" then set lextens to "mov"
                if dernier = "mpeg" then set lextens to "mp3"
                if dernier = "x-rar" then set lextens to "rar"
                if dernier = "epub+zip" then set lextens to "epub"
                if dernier = "ms-powerpoint" then set lextens to "pps"
                if dernier = "x-ms-bmp" then set lextens to "bmp"
                if dernier = "x-tar" then set lextens to "tar"
                if dernier = "svg+xml" then set lextens to "svg"
               
               
                set lenewfichier to lefichier as string
                set newnom to nom & "." & lextens
                set name of lefichier to newnom
                set lenewfichier to lenewfichier & "." & lextens as alias
                set extension hidden of lenewfichier to false
               
            end if
        end repeat
       
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
   
end inspecter
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (17 Avril 2022)

La suite...

Je viens de retrouver des fichiers au format postscript .eps et ancien illustrator 1.1 qui s'ouvre avec illustrator 2021.
Pour les gérer tu ajoutes une ligne à la suite de :  (if dernier = "svg+xml" then set lextens to "svg") la ligne :
if dernier = "postscript" then set lextens to "ai"

Je continue mes recherches  LOL !


----------



## zeltron54 (23 Avril 2022)

Bonjour,
@magicPDF 

As-tu eu le temps de tester ?
As-tu d'autres types de fichiers à ajouter ?
Je réitère, attention à l'ajout de l'extension "indd" qui est ajoutée à beaucoup de types de fichiers...


----------



## magicPDF (23 Avril 2022)

Génial. 
J'ai traité 3421 fichiers. Merci.
Par-contre j'ai encore un peu de défrichage à faire dans les 2041 fichiers .indd.


----------



## Locke (23 Avril 2022)

magicPDF a dit:


> Par-contre j'ai encore un peu de défrichage à faire dans les 2041 fichiers .indd.


Maurice, tu pousses le bouchon un peu loin.


----------



## zeltron54 (24 Avril 2022)

waou ! 3421 Fichiers quand même !
Bon 40% de fait, je suppose que ce sont les jpg, png, pdf, et autres de la liste des reconnus

Dans les 2041 restant, ils sont tous avec .indd ou tu as autre chose ?


----------



## magicPDF (25 Avril 2022)

A priori tous ces .indd sont en fait des images car ces fichiers commencent presque tous par : ‰PNG
Même si je change l'extension Photoshop refuse de les ouvrir.

Mais ce n'est pas très important, j'ai récupéré l'essentiel : les PDF, les .TXT et les .JS (JavaScript), auxquels curieusement le script a attribué le suffixe ".x-c++"

Merci encore.


----------



## magicPDF (27 Avril 2022)

Comme la plupart des ces fichiers suffixés ne s'ouvraient pas et sont inexploitables j'ai revu ma copie.
En fait ce sont des fichiers rapatriés par FTP depuis un serveur, ce sont toutes les pièces jointes de l'ancienne version du forum abracadabraPDF, et j'ai appris en furetant qu'il fallait les télécharger en mode BIN pour qu'ils soient exploitables.
Ce que j'ai fait.

Après utilisation de ton script sur ces nouveaux fichiers il n'y en a plus qu'un seul fichier .indd (en fait c'est un .idml), tous les autres sont correctement suffixés (sauf 5 fichiers .js et 1 .sla) et jusqu'ici tous ceux que j'ai essayé se sont ouverts.


----------



## zeltron54 (27 Avril 2022)

Content pour toi !


----------

