Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ Appli : supprimer .ds store puis éjecter [Résolu]

Écrit par : Little Brother 27 Feb 2015, 23:07

Bonjour,

Comme beaucoup d'entre nous, j'utilise des clés et disque externe USB, pour communiquer avec de PC ou dans mon cas pour le brancher sur la TV pour y visionner des films.

Ce qui est ennuyeux, c'est que les fichiers cachés générés par mac os deviennent visibles sur les autres interfaces.

L'idée c'est de pouvoir les supprimer.
Et comme, on les ejecte par "glisser dans la corbeille", j'imagine une app qui marche par drag and drop du volume sur l'app qui :
- supprime les fichier commençant par un point
- qui ejecte le volume.

Je pense utiliser Automator.
Mais après ? Script shell pour la suppression des fichier cachés puis la commande eject du finder présent dans automator ?

Il faudrait la commande suivante : supprimer tous les fichiers commençant par un point du volume glissé sur l'app.

Je ne suis pas doué en shell. Un peu d'aide serait la bienvenue (surtout qu'une commande de suppression en shell peut vite dégénérer !).

Merci !

Écrit par : JacqR 28 Feb 2015, 04:41

Bonjour,

Citation (Little Brother @ 27 Feb 2015, 17:07) *
L'idée c'est de pouvoir les supprimer.
Et comme, on les ejecte par "glisser dans la corbeille", j'imagine une app qui marche par drag and drop du volume sur l'app qui :
- supprime les fichier commençant par un point
- qui ejecte le volume.

Je pense utiliser Automator.
Mais après ? Script shell pour la suppression des fichier cachés puis la commande eject du finder présent dans automator ?

Oui, c'est exactement cela

Dans l'action "Exécuter un script Shell" :
Sélectionne dans les popup "/bin/bash" comme Shell et "comme arguments" comme Données en entrée.
Supprime tout le texte dans l'action
Copie/colle ce script :
Code
for f in "$@"
do
    if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
        find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
        echo "$f"
    fi
done


Information sur le script :
Si vous déposez des fichiers ou des dossiers, cela ne fera rien.
for f in "$@" ceci est une boucle, fonctionne sur un volume ou plusieurs volumes déposés sur l'application.
if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then ceci vérifie que l'élément déposé est bien un volume et que ce n'est pas le disque de démarrage.
find "$f" -type f -name '.*' -exec /bin/rm -f {} \; recherche tous les fichiers dont le nom commence par un point et les supprime.
2>/dev/null pour ne pas avoir d'erreur sur les fichiers dont vous n'avez pas les permissions.
echo "$f" ceci retourne le chemin du volume pour l'action "Éjecter le disque".

Écrit par : Little Brother 28 Feb 2015, 14:38

Merci JacqR !

Ça marche du tonnerre !

Juste qu'en fait en faisant appel au finder pour l'ejection, il semble qu'on ai pas besoin de récupérer le chemin du volume.

Je me disais qu'il serait judicieux d'ajouter une fonction qui permet d'opérer l'effacement uniquement sur les volume non MacOs.
C'est jouable ?

Écrit par : yponomeute 28 Feb 2015, 18:03

Salut,

pour une restriction sur les volumes "msdos" uniquement (j'ai pas testé le script smile.gif )

Code
for f in "$@"
do
    msdos=`diskutil info $f | grep msdos | wc -l`
    if [ $msdos > 0 ]; then
        if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
            find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
            echo "$f"
        fi
    fi
done

Écrit par : JacqR 28 Feb 2015, 18:50

Bonjour,

Citation (Little Brother @ 28 Feb 2015, 08:38) *
Je me disais qu'il serait judicieux d'ajouter une fonction qui permet d'opérer l'effacement uniquement sur les volume non MacOs.
C'est jouable ?

Si c'est pour vérifier que le format du disque soit du type windows (ntfs, fat ou msdos), utilise ce script:
Code
for f in "$@"
do
    if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
        r=$(diskutil info "$f" | grep 'Partition Type:')
        if [[ ! "$r" = *Apple_* ]]; then
            find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
            echo "$f"
        fi
    fi
done

Information du script :
r=$(diskutil info "$f" | grep 'Partition Type:') récupère la ligne qui contient le format du volume
if [[ ! "$r" = *Apple_* ]]; then si le format du volume n'est pas Apple, on continue à la ligne suivante, sinon on passe au prochain élément dans la liste des volumes déposé.




Citation (Little Brother @ 28 Feb 2015, 08:38) *
Juste qu'en fait en faisant appel au finder pour l'ejection, il semble qu'on ai pas besoin de récupérer le chemin du volume.

Sur mon système, si je ne mets pas echo "$f" dans le script, il n'y a aucun volume qui s'éjecte

Écrit par : Little Brother 1 Mar 2015, 00:46

Génial, je regarde ça de plus près !

Citation (JacqR @ 28 Feb 2015, 18:50) *
Citation (Little Brother @ 28 Feb 2015, 08:38) *
Juste qu'en fait en faisant appel au finder pour l'ejection, il semble qu'on ai pas besoin de récupérer le chemin du volume.

Sur mon système, si je ne mets pas echo "$f" dans le script, il n'y a aucun volume qui s'éjecte

Exact !

Écrit par : Little Brother 1 Mar 2015, 11:57

Les commandes Unix, c'est un peu plus raide que mes cours de basic de 1986 ! laugh.gif

Merci les gars !

Écrit par : radioman 1 Mar 2015, 15:57

sur l'AppStore il y a https://itunes.apple.com/fr/app/cleanmydrive-external-drives/id523620159?mt=12 , Gratuit …

Écrit par : Little Brother 2 Mar 2015, 11:45

@radioman : oui merci mais ce n'est pas aussi simple que notre "Clean & Eject".app ! Et puis, le plaisir de mettre les mains dans le cambouis !

@JacqR : ça marche presque, sauf qu'il n'y a pas ejection des volumes mac os. Est-ce qu'il suffit de sortir "echo "$f" de la boucle et de la décaler vers le bas ?
genre quelque chose comme ça :

CODE

for f in "$@"
do
if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
r=$(diskutil info "$f" | grep 'Partition Type:')
if [[ ! "$r" = *Apple_* ]]; then
find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
fi
echo "$f"
fi
done


?

Écrit par : JacqR 2 Mar 2015, 13:36

Bonjour,

Citation (Little Brother @ 2 Mar 2015, 05:45) *
@JacqR : ça marche presque, sauf qu'il n'y a pas ejection des volumes mac os. Est-ce qu'il suffit de sortir "echo "$f" de la boucle et de la décaler vers le bas ?
genre quelque chose comme ça :
CODE
for f in "$@"
do
if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
r=$(diskutil info "$f" | grep 'Partition Type:')
if [[ ! "$r" = *Apple_* ]]; then
find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
fi
echo "$f"
fi
done

Oui, c'est exactement là pour éjecter tous les types de volume. smile.gif

Écrit par : titi. 2 Mar 2015, 13:47

Citation (radioman @ 1 Mar 2015, 15:57) *
sur l'AppStore il y a https://itunes.apple.com/fr/app/cleanmydrive-external-drives/id523620159?mt=12 , Gratuit …


Faudrait leur dire de sortir "Clean & Eject My Drive" smile.gif


Citation (Little Brother @ 2 Mar 2015, 11:45) *
@radioman : oui merci mais ce n'est pas aussi simple que notre "Clean & Eject".app ! Et puis, le plaisir de mettre les mains dans le cambouis !

Est ce que ça va mettre du temps à nettoyer, à chaque fois qu'on éjecte ?
Parce que si ça doit passer en revue mes 16Go, c'est pas en quelques secondes que je vais éjecter mes clés USB.

Écrit par : Little Brother 2 Mar 2015, 15:09

@titi. :

C'est quasi instantané sur un volume de FAT de 750 Go. Le temps de nettoyage est négligeable face au temps de démontage.

Edit :
En fait, plus il y a de dossiers et de fichiers, plus ce sera long. En ce qui me concerne, les fichiers font minimum 700 Mo, donc pas tant de fichiers et dossiers.
Ça dépend aussi de la création ou pas des fichiers DS Store, si un dossier n'est pas ouvert, j'ai l'impression que le fichier DS Store n'est pas créé au niveau du dit dossier.




Écrit par : Little Brother 2 Mar 2015, 18:00

Pour ceux qui n'en veulent :

Clean & Eject comment ça marche :

Simplement un Drag & Drop d'un volume sur l'icône de l'app.
- Ejecte les volumes Mac Os
- Nettoie les volumes non mac des fichier DS Store et consorts puis ejecte.

Il suffit de laisser l'app traîner sur le bureau.

Il y a certainement mieux comme appui mais celle-ci est si simple qu'il n'y a même pas de menu !
Vous pouvez même la modifier dans Automator.

Cheers !

C'est par là :

http://dl.free.fr/iN78iL7p8

Écrit par : Anard 12 May 2015, 19:11

Dans le genre tout fait, moi j'utilise http://kerosene.free.fr/ qui marche nickel wink.gif ... et qui éjecte comme votre script

Écrit par : marc_os 19 Aug 2015, 14:15

Cool le script !

Pour info, les fichiers .DSStore servent à stocker les infos de taille et position dans le Finder de la fenêtre associée au dossier quand on ouvre ce dossier dans une nouvelle fenêtre. Le type de vue (par ligne, colonne ou icônes, y est stocké aussi me semble-t-il.

Chaque OS a ses trucs. Windows lui ajoute des Thumbs.db inutiles sur Mac dans les dossiers contenant des images...

Écrit par : anonym_d019ede3 23 Aug 2015, 17:38

En générale les fichiers qui posent problème sur un lecteur multimédia ou tv ce sont les mêmes noms de films avec un point devant, ils sont l'indexation de Spotlight. Suffit de rentrer le volume dans l'onglet confidentialité de Spotlight et se servir d'easyfind à la place.

Écrit par : apenSPEL 24 Aug 2015, 07:43

Moi j'utilise http://zeroonetwenty.com/blueharvest/ pour les volumes que je dois partager avec Windows et autres, pour éviter que ces fichiers dont le nom commence par un point ne se créent.

Ainsi, à chaque insertion d'un nouveau volume comme une clef USB ou autre, BlueHarvest me demande s'il doit le garder propre.

Écrit par : dedestelyon 21 Jul 2016, 19:53

Bonjour à tous,

Petit déterrage après 1 an, je cherchais un soft :
- pour nettoyer les clés USB que je partage avec les collègues sous Windows ;
- qui ne rentre pas en conflit avec JetDrive Toolbox qui gère ma carte SD Transcend.

Hidden Cleaner fonctionnait super bien sous SL... mais depuis j'ai changé de machine !

Déjà un grand merci pour les posts ci-dessus !

Le lien dl.free.fr ci-dessus n'est plus valide et le script proposé ne permettait apparemment pas de supprimer les dossiers ".Trashes" ou ".Spotlight-V100" et autres à la racine des clés USB.

Voilà ma version bidouillée (version du 25/07) :

Citation
for f in "$@"
do
if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
r=$(diskutil info "$f" | grep 'Partition Type:')
if [[ ! "$r" = *Apple_* ]]; then
find "$f" -type d -name '.*' -exec chflags -R nouchg {} \; 2>/dev/null
find "$f" -type d -name '.*' -exec /bin/rm -rf {} \; 2>/dev/null
find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
find "$f" -type f -iname 'thumbs.db' -exec /bin/rm -f {} \; 2>/dev/null
find "$f" -type f -iname 'desktop.ini' -exec /bin/rm -f {} \; 2>/dev/null
find "$f" -type d -name 'RECYCLER' -exec chflags -R nouchg {} \; 2>/dev/null
find "$f" -type d -name 'RECYCLER' -exec /bin/rm -rf {} \; 2>/dev/null
find "$f" -type d -name 'RECYCLED' -exec chflags -R nouchg {} \; 2>/dev/null
find "$f" -type d -name 'RECYCLED' -exec /bin/rm -rf {} \; 2>/dev/null
find "$f" -type d -name '$Recycle.Bin' -exec chflags -R nouchg {} \; 2>/dev/null
find "$f" -type d -name '$Recycle.Bin' -exec /bin/rm -rf {} \; 2>/dev/null
fi
echo "$f"
fi
done


Détail des commandes ajoutées (version du 25/07) :
find "$f" -type d -name '.*' -exec chflags -R nouchg {} \; 2>/dev/null recherche les dossiers contenant des fichiers verrouillés et déverrouille ces derniers. Typiquement le cas d'un fichier verrouillé envoyé à la Corbeille.
find "$f" -type d -name '.*' -exec /bin/rm -rf {} \; 2>/dev/null permet de localiser les fameux dossiers ".trashes" et autres et de les supprimer.
find "$f" -type f -iname 'thumbs.db' -exec /bin/rm -f {} \; 2>/dev/null s'occupe des fichiers "thumbs.db" créés par windows.
find "$f" -type f -iname 'desktop.ini' -exec /bin/rm -f {} \; 2>/dev/null s'occupe des fichiers "desktop.ini" créés par windows.
Les 6 lignes se rapportant à "RECYCLED", "RECYCLER", "$RECYCLE.BIN" viennent déverouiller les dossiers Corbeilles créés par windows (FAT, NTFS, Win 7+) et les suppriment.

Voilà en gros une illustration des fichiers qui vont sauter sur la clé USB avant éjection (en rouge) :
http://www.hostingpics.net/viewer.php?id=126717USB.jpg

J'uploade le script sous forme d'app automator. J'intègre dans le paquet le code et un lien vers ce post. Par souci d’esthétisme j'ai ajouté une icône et sa licence CC BY 3.0 dans le paquet.

A télécharger ici : http://www118.zippyshare.com/v/l7NZTlcW/file.html

Testé sur ma machine (MBA 2015) sous El Capitan. N'hésitez pas à commenter le code si quelque chose vous semble louche, je ne suis pas un habitué du bash !


Edit :

Pour ceux qui n'ont pas activé l'écriture sur les disques NTFS ou HFS+, ou qui veulent juste une app légère, rapide et qui ne s'encombre pas des fichiers laissés par Windows :

Citation
for f in "$@"
do
if [[ "$f" = "/Volumes/"* ]] && mount | grep "$f" > /dev/null; then
r=$(diskutil info "$f" | grep 'Partition Type:')
if [[ ! "$r" = *Apple_* ]]; then
find "$f" -type d -name '.*' -exec chflags -R nouchg {} \; 2>/dev/null
find "$f" -type d -name '.*' -exec /bin/rm -rf {} \; 2>/dev/null
find "$f" -type f -name '.*' -exec /bin/rm -f {} \; 2>/dev/null
fi
echo "$f"
fi
done


Cette version "lite", beaucoup plus proche de l'esprit de la demande initiale, est téléchargeable ici :
http://www49.zippyshare.com/v/ZwB7Av3b/file.html

A bientôt !

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)