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


O som do meu carro pode tocar músicas 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 em 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?


9


origem


Eu tive o mesmo problema. Se os arquivos ._ estiverem lá, meu aparelho de som diria "Bad Media", o que estava totalmente errado. Ele tocaria os arquivos com o nome correto, mas reclamou de cada arquivo ._. Demorei um pouco para verificar que a mídia não era ruim, o som do carro era! - Eric
Mas não é culpa do estéreo que é uma droga ... Lol. Acabei de colocá-lo no meu computador Win7 para colocar música no trabalho e vi todos eles: um monte de arquivos ocultos que eram 4KB cada - Canadian Luke
O som do carro devemos ignore esses arquivos. No seu caso, eles não contêm nenhuma informação necessária. Mas é o mesmo problema em todo lugar. Meu reprodutor de mídia DLNA também mostra isso enquanto navega. - slhck


Respostas:


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

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,  na sua unidade USB.


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: Limpador oculto.


20



Não percebi isso ... É bom saber. Vou tentar isso hoje à noite quando chegar em casa e marcar sua resposta. obrigado - Canadian Luke


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

dot_clean "/Volumes/<your-volume-name>"

7





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 eu achei este post muito útil, obrigado.

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

  1. Criar 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.

Apreciar!


3



Isso é realmente útil, você consideraria postar o fluxo de trabalho completo do Automator? - Konrad
Incrível, muito obrigado! Funciona para mim no OSX10.12.1 se eu remover {input, parameters} da linha 1 (deixando apenas on run). @ Konrad: abri o 'Editor de scripts', fiz a edição acima e salvei em / Aplicativos como um aplicativo; tarefa concluída. Adoro poder ver exatamente o que está acontecendo, o que é mais complicado com outras soluções gratuitas. - ptim
Obrigado. Eu tentei o seu script. Quando eu corri do aplicativo Automator para testá-lo, cliquei na opção abortar na caixa de diálogo de seleção de disco e ainda recebi um prompt do sudo e uma mensagem sobre a falha de ejetar o disco. Eu acho que precisa ser consertado. Eu sugiro que você vá um pouco mais em sua resposta com explicando como testar e configurar o script para ser utilizável a partir de um menu de serviços no Finder. - Mark Edington


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

Delete ._*.mp3 in an Automator workflow.


2



Terminal não me assusta a menos que eu faça rm -rf / e pressione Enter: P Mas eu gostaria de aprender Automator, parece legal - Canadian Luke
Ah, sim, é uma boa ideia também. - slhck
Obter Itens do Localizador Selecionado é útil aqui? - Daniel Beck♦
Na verdade não. Eu estava no Mac de outra pessoa e tive que trabalhar apressadamente. - digitxp