Alguém tem um script Mac Terminal para remover arquivos ocultos?

9

O som do meu carro pode reproduzir música de drives flash USB, então eu perguntei sobre copiando MP3s de uma lista de reprodução do iTunes . Isso funcionou bem, mas meu aparelho de som não tocava os arquivos MP3. Eu finalmente coloquei a unidade flash no meu computador de trabalho executando o Windows 7, e eu encontrei o problema: um monte de arquivos ocultos no formato ._[filename].mp3 também foram carregados.

Eu sei que no Windows, você pode excluir arquivos com base em atributos, e eu queria saber se você pode fazer o mesmo no Terminal? Possivelmente com um script que eu possa executar com o Volume como um parâmetro?

    
por Canadian Luke 05.08.2011 / 18:20

4 respostas

20

Esses arquivos estão ocultos no OS X porque iniciam com . e, portanto, não são mostrados no Finder por padrão. Não há nenhum atributo especial definido nesses arquivos além disso.

Uma abordagem muito simplista seria excluir todos os arquivos que começam com um ponto e um sublinhado:

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

Nota de segurança: Execute isso sem -delete para ver quais arquivos seriam removidos. E nunca faça isso em todo o seu Mac HD, somente no seu pen drive.

Para algumas informações adicionais: Esses arquivos são chamados de "Resource Forks" e, às vezes, contêm informações que você não deseja excluir. No seu caso de uso, isso deve ser bom. Você pode desativar permanentemente a criação desses arquivos usando BlueHarvest . Há também um aplicativo que afirma limpar volumes deles, mas eu não tentei e é beta, então use com cautela: Oculto Cleaner .

    
por 05.08.2011 / 18:53
7

Mais uma solução que funcionou para mim (MacOS 10.6.8) no tipo de terminal:

dot_clean "/Volumes/<your-volume-name>"
    
por 09.05.2014 / 12:10
3

Eu tive exatamente o mesmo problema com o meu aparelho de som do carro, 1 arquivo / 2 não é jogável, porque o jogador considera que o arquivo de ponto criado pelo MAC OS é um arquivo de música ... Então achei esse post muito útil, obrigado.

Então eu volto agora com uma solução melhorada e gratuita para o Mavericks:

  1. Crie um aplicativo do Automator para executar um script AppleScript
  2. Use este 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. Salve o aplicativo como DiskCleaner.app, por exemplo

Este script pedirá que você escolha o disco USB para limpar e ejetar. Em seguida, ele limpará o disco USB (tente com credenciais de administrador se falhar com as atuais) e, em seguida, ejete, se possível.

Claro que ainda há algum lugar para melhorar, eu fiz esse roteiro para mim!

Além disso, você tem a flexibilidade de adicionar linhas de código para limpar mais arquivos.

Aproveite!

    
por 19.09.2014 / 23:25
2

Você também pode usar o Automator para realizar a mesma coisa se o terminal o assustar:

    
por 05.08.2011 / 19:03