Esvaziando o lixo da unidade USB

41

Eu tenho uma unidade USB conectada ao meu Mac. O que descobri foi que .Trashesnão foi esvaziado quando o lixo esvaziado (clique com o botão direito do mouse no ícone Lixeira e execute "Empty Trash") na unidade USB

O que pode estar errado? Existe alguma outra maneira de esvaziar o lixo da unidade USB?

prosseek
fonte
9
Interessante, esvaziar o lixo sempre faz isso com êxito nas minhas unidades USB. Minha única reclamação é que, muitas vezes, eu gostaria apenas de esvaziar o lixo da minha unidade USB e não precisava fazê-lo para todas as unidades do sistema.
Matthew Frederick
4
@Matthew tryrm -R /Volumes/volumename/.Trashes/$UID
Gordon Davisson
@Gordon Perfeito, obrigado! Criou um Applescript de uma linha para executar o comando e são necessárias algumas teclas QuickSilver a qualquer momento.
Matthew Frederick

Respostas:

36

É possível que haja arquivos na lixeira de outro usuário . A .Trashespasta na parte superior de cada volume possui subpastas para cada usuário diferente, por número de ID do usuário (por exemplo, a lixeira do usuário 502 está dentro .Trashes/502).
Você pode ver se está usando um comando como este (substitua VolumeNamepelo nome da sua unidade):

ls -la /Volumes/VolumeName/.Trashes/
total 0
d-wx-wx-wt@  3 _unknown  _unknown   102 10 Feb 18:15 .
drwxrwxrwx@ 21 root      wheel      782 13 Feb 14:17 ..
drwx------@ 35 _unknown  _unknown  1190 13 Feb 14:18 502

Como você pode ver, na minha .Trashespasta de disco USB, há uma subpasta chamada 502, de propriedade da identificação de usuário 502 (para referência, minha identificação de usuário atual é 501). Como esse usuário não existe no meu sistema, eu o vejo como _unknowne meu usuário não pode olhar dentro dele nem excluí-lo. Para olhar dentro dessa pasta, precisamos fazer isso como administrador (ou seja, usar sudo).

Se tiver certeza de que deseja, você pode excluir o lixo de todos , excluindo a .Trashespasta inteira com um comando como:

sudo rm -R /Volumes/volumeName/.Trashes

Aviso: como em qualquer coisa que envolva sudo( "faça como superusuário" , ou seja, administrador do sistema) e rm -R, use isso com cuidado. Se você digitar errado, pode ter ... consequências desagradáveis .

Gordon Davisson
fonte
O "pode ​​estar no lixo de outra pessoa" é exatamente o problema que eu estava enfrentando. Isso deve ser melhor anunciado!
Cdeszaq 11/11/12
Adicionar a opção -f ao comando forçará a ação. Substituir o "nome do volume" por "*" permitiria conectar várias unidades USB e esvaziar todo o lixo em todas simultaneamente. Não é necessário conectar 1 por 1 e refazer.
Danijel-James W
Pode ser perigoso executar um comando que envolva ambos sudo rme /Volumes/*/something, porque pode afetar até a unidade do sistema, e um erro de digitação pode ter consequências ruins.
gerlos
8

Comportamento usual:
quando você exclui algo de uma unidade USB, ele é movido para uma .Trashespasta nesse volume. Quando conectado ao computador, os itens excluídos aparecerão na lixeira com todo o resto.

Quando você o desconecta, os itens que você excluiu dessa unidade não serão mais exibidos no lixo até que você o reconecte. Em seguida, você pode esvaziar o lixo. Ele realmente os excluirá dessa unidade.

Se isso não está acontecendo para você, aqui está a minha sugestão:

  1. Selecione a unidade na barra lateral do Finder.
  2. Sem selecionar mais nada, pressione cmd-i(ou use o item de menu FileGet Info).
  3. Use a Sharing and Permissionsseção dessa janela para conceder Everyoneas permissões Read and Write.
Nathan Greenstein
fonte
Este deve ser aceito
zsitro
7

Não sei se é a melhor resposta, mas pelo menos é a resposta certa.

Abra a linha de comando, cd no volume USB (/ Volumes / USB para o meu caso) e digite:

/bin/rm -rf ./Trashes/* works fine with me.
prosseek
fonte
Isso exigiria que o usuário tivesse que acessar o volume específico a cada vez. Com base na sua resposta, criei um script Bash e uma solução AppleScript.
Danijel-James W
2

2 Soluções. 1 usando Bash e outro usando Bash embrulhado em AppleScript.

Solução # 1

  1. Crie um novo AppleScript com /Applications/Utilities/AppleScript Editor
  2. Digite o seguinte código:

    faça shell script "rm -rf /Volumes/*/.Trashes/*" com privilégios de administrador

  3. Salve o arquivo em um local conveniente e execute-o sempre que precisar limpar o Lixo USB
  4. Isso pode ser executado clicando duas vezes nele

NOTA: Isso esvaziará a Lixeira de todos os volumes conectados, incluindo o disco rígido interno. Se você conectou 5 unidades USB e um disco rígido Firewire, ele esvaziará o lixo de todas elas.


Solução # 2

  1. Inicie seu editor de texto favorito (o meu é nano)
  2. Cole o seguinte código no seu editor de texto e salve o arquivo

    #! / bin / bash
    sudo rm -rf /Volumes/*/.Trashes/*

  3. Salve o arquivo em um local conveniente com a extensão .she, em seguida, torne-o executável no chmod +x {filename}.shTerminal

  4. Execute isso com ./{filename}.sh

NOTA: A mesma nota acima. Isso é executável no Terminal.

Danijel-James W
fonte
2

Eu uso esse script AppleScript, salve-o como Aplicativo:

on open these_volumes
    set t_id to user ID of (system info)
    repeat with i in these_volumes
        if (kind of (info for i without size)) is "Volume" then
            set tPath to (POSIX path of i) & ".Trashes/" & t_id
            do shell script "/bin/rm -Rf  " & (quoted form of tPath) & "/*"
        end if
    end repeat
end open

Arraste / solte volumes no aplicativo.

Este script remove os itens da pasta Lixeira (ID do usuário) no volume. se outros usuários usarem o volume, esse script não excluirá os itens da pasta lixeira, caso contrário, o script precisará de uma senha de administrador para fazer isso.


Se você deseja ejetar o volume após esvaziar a lixeira, use este script.

on open these_volumes
    set t_id to user ID of (system info)
    set volToEject to {}
    repeat with i in these_volumes
        if (kind of (info for i without size)) is "Volume" then
            set tPath to (POSIX path of i) & ".Trashes/" & t_id
            do shell script "/bin/rm -Rf  " & (quoted form of tPath) & "/*"
            set end of volToEject to contents of i
        end if
    end repeat
    if volToEject is not {} then tell application "Finder" to eject volToEject
end open
Tony_kenya
fonte
Para que o AppleScript funcione, basta arrastar o dispositivo conectado ou dirigir para o aplicativo AppleScript e soltar. Você pode criar um alias na doca ao lado da lixeira comum, por conveniência, arrastando e soltando o ícone Aplicativo na doca lateral.
217715 Tony_kenya