Quelqu'un at-il un script Mac Terminal pour supprimer les fichiers cachés?

10

Mon autoradio peut lire de la musique à partir de lecteurs flash USB, j'ai donc demandé de copier des MP3 à partir d'une liste de lecture iTunes . Cela a bien fonctionné, mais ma chaîne stéréo ne pouvait pas lire les fichiers MP3. J'ai finalement mis le lecteur flash dans mon ordinateur de travail exécutant Windows 7, et j'ai trouvé le problème: un tas de fichiers cachés au format ._[filename].mp3ont également été chargés.

Je sais que sous Windows, vous pouvez supprimer des fichiers en fonction d'attributs, et je me demandais si vous pouviez faire de même dans Terminal? Peut-être avec un script que je peux exécuter avec le volume comme paramètre?

Canadian Luke
la source
J'ai eu exactement le même problème. Si les fichiers ._ étaient là, ma chaîne stéréo dirait "Bad Media", ce qui était totalement faux. Il jouerait les fichiers correctement nommés, mais se plaignait de chaque fichier ._. Il m'a fallu un certain temps pour vérifier que les médias n'étaient pas mauvais, que l'autoradio l'était!
Eric
Mais ce n'est pas la faute de la stéréo qu'elle suce ... Lol. Je viens de le mettre dans mon ordinateur Win7 pour mettre de la musique au travail et je les ai tous vus: un tas de fichiers cachés de 4 Ko chacun
Canadian Luke
L'autoradio doit ignorer ces fichiers. Dans votre cas, ils ne contiennent aucune information nécessaire. Mais c'est le même problème partout. Mon lecteur multimédia DLNA les affiche également lors de la navigation.
slhck

Réponses:

21

Ces fichiers sont masqués dans OS X car ils commencent par .et ne sont donc pas affichés par défaut dans le Finder. Il n'y a aucun attribut spécial défini dans ces fichiers à part cela.

Une approche très simpliste serait de supprimer tous les fichiers qui commencent par un point et un trait de soulignement:

find /Volumes/<your-volume-name> -name '._*' -type f -delete

Note de sécurité: exécutez cela sans -deletepour voir quels fichiers seraient supprimés. Et ne faites jamais cela sur l'ensemble de votre Mac HD, uniquement sur votre clé USB.


Pour quelques informations supplémentaires: Ces fichiers sont appelés "Resource Forks" et contiennent parfois des informations que vous ne souhaitez pas supprimer. Dans votre cas d'utilisation, cela devrait être bien. Vous pouvez désactiver définitivement la création de ces fichiers à l'aide de BlueHarvest . Il existe également une application qui prétend en nettoyer les volumes, mais je ne l'ai pas essayée et c'est une version bêta, alors utilisez-la avec prudence: Hidden Cleaner .

slhck
la source
Je ne savais pas que ... Bon à savoir. J'essaierai ce soir quand je rentrerai, puis marquerez votre réponse. Merci
Canadian Luke
8

Une autre solution qui a fonctionné pour moi (MacOS 10.6.8) dans le type de terminal:

dot_clean "/Volumes/<your-volume-name>"
shershen
la source
3

J'ai eu exactement le même problème avec mon autoradio, 1 fichier / 2 est injouable, car le joueur considère que le fichier dot créé par MAC OS est un fichier musical ... Ensuite j'ai trouvé ce post vraiment utile, merci.

Je reviens donc maintenant avec une solution améliorée et gratuite pour Mavericks:

  1. Créer une application Automator pour exécuter un script AppleScript
  2. Utilisez ce script:

    on run {input, parameters}
        try
            tell application "Finder" to set allDrives to the name of every disk whose local volume is true and startup is false
            set driveName to {choose from list allDrives with title "DiskCleaner" with prompt "Disk to Clean and Eject:" OK button name "Clean and Eject" cancel button name "Abort"} as text
            set getDriveIdentifier to "diskutil info " & quoted form of driveName & " | grep Ident | awk '{print $3}'"
            set driveIdentifier to do shell script getDriveIdentifier
            try
                do shell script "find /Volumes/" & quoted form of driveName & " -name '.DS_Store' -type f -delete"
                do shell script "find /Volumes/" & quoted form of driveName & " -name '.FBC*' -type f -delete"
                do shell script "find /Volumes/" & quoted form of driveName & " -name '._*' -type f -delete"
                do shell script "rm -rf /Volumes/" & quoted form of driveName & "/.{,_.}{fseventsd,Spotlight-V*,Trashes}"
                display notification "Disk Cleaned"
            on error
                try
                    do shell script "sudo find /Volumes/" & quoted form of driveName & " -name '.DS_Store' -type f -delete" with administrator privileges
                    do shell script "sudo find /Volumes/" & quoted form of driveName & " -name '.FBC*' -type f -delete" with administrator privileges
                    do shell script "sudo find /Volumes/" & quoted form of driveName & " -name '._*' -type f -delete" with administrator privileges
                    do shell script "sudo rm -rf /Volumes/" & quoted form of driveName & "/.{,_.}{fseventsd,Spotlight-V*,Trashes}" with administrator privileges
                    display notification "Disk Cleaned"
                on error
                    display notification "Can't Clean, Permission Denied"
                end try
            end try
            delay 1
            try
                do shell script "diskutil eject " & driveIdentifier
                display notification "Disk Ejected"
            on error
                display notification "Can't Eject, Disk in Use"
            end try
        on error
            display notification "No Disk to Clean and Eject"
        end try
    end run
    
  3. Enregistrez l'application sous DiskCleaner.app par exemple

Ce script vous demandera de choisir le disque USB à nettoyer et à éjecter. Ensuite, il nettoiera le disque USB (essaie avec les informations d'identification d'administrateur en cas d'échec avec les actuelles), puis éjecte si possible.

Bien sûr, il y a encore de la place pour l'amélioration, j'ai fait ce script pour moi!

Vous avez également la possibilité d'ajouter des lignes de code pour nettoyer davantage de fichiers.

Prendre plaisir!

RSelec
la source
Ceci est vraiment utile, envisageriez-vous de publier l'intégralité du flux de travail Automator?
Konrad
Génial, merci beaucoup! Fonctionne pour moi sur OSX10.12.1 si je supprime {input, parameters}de la ligne 1 (en laissant seulement on run). @ Konrad: J'ai ouvert «Script Editor», effectué la modification susmentionnée et enregistré dans / Applications en tant qu'application; travail accompli. J'adore pouvoir voir exactement ce qui se passe, ce qui est plus délicat avec d'autres solutions gratuites.
ptim
Merci. J'ai essayé ton script. Lorsque je l'ai exécuté à partir de l'application Automator pour le tester, j'ai cliqué sur l'option d'abandon dans la boîte de dialogue de sélection de disque et j'ai toujours reçu une invite sudo et un message sur l'échec de l'éjection du disque. Je pense que cela doit être corrigé. Je vous suggère d'aller un peu plus loin dans votre réponse en expliquant comment tester et configurer le script pour qu'il soit utilisable à partir d'un menu de services dans le Finder.
Mark Edington
2

Vous pouvez également utiliser Automator pour accomplir la même chose si le terminal vous fait peur:

Supprimez ._ *. Mp3 dans un workflow Automator.

digitxp
la source
Le terminal ne me fait peur que si je fais rm -rf / et appuie sur Entrée: P Mais j'aimerais apprendre Automator, ça a l'air cool
Canadian Luke
Ah, oui, c'est aussi une bonne idée.
slhck
Est-ce que Get Selected Finder Items est utile ici?
Daniel Beck
Pas vraiment. J'étais sur le Mac de quelqu'un d'autre et j'ai dû travailler à la hâte.
digitxp