Opróżnianie śmieci z dysku USB

41

Mam dysk USB podłączony do mojego komputera Mac. To, co znalazłem, .Trashesnie zostało opróżnione, gdy opróżnianie kosza (kliknij prawym przyciskiem myszy ikonę Kosza i uruchom „Opróżnij kosz”) dla napędu USB

Co może być nie tak? Czy istnieje inny sposób na opróżnienie kosza na napęd USB?

prosseek
źródło
9
Interesujące jest to, że opróżnianie kosza zawsze udaje się w przypadku moich napędów USB. Moja jedyna skarga jest to, że często Chciałbym tylko opróżnić kosz na moim dysku USB i nie trzeba robić dla każdego dysku w systemie.
Matthew Frederick
4
@Matthew tryrm -R /Volumes/volumename/.Trashes/$UID
Gordon Davisson
@Gordon Idealne, dzięki! Utworzono jednowierszowy skrypt Apple do uruchomienia polecenia i jest to kilka naciśnięć klawiszy QuickSilver w dowolnym momencie.
Matthew Frederick

Odpowiedzi:

36

Możliwe, że w koszu innego użytkownika znajdują się pliki . .TrashesKatalogu na górze każdej objętości ma podkatalogów dla każdego poszczególnego użytkownika, na podstawie numeru ID użytkownika (np user 502 na śmieci w .Trashes/502).
Możesz to sprawdzić za pomocą polecenia takiego jak ten (zamień VolumeNamena nazwę dysku):

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

Jak widać, w moim .Trashesfolderze na dysku USB znajduje się podfolder o nazwie 502ID użytkownika 502 (w celach informacyjnych mój obecny identyfikator użytkownika to 501). Ponieważ ten użytkownik nie istnieje w moim systemie, widzę go jako _unknown, a mój użytkownik nie może zajrzeć do niego ani go usunąć. Aby zajrzeć do tego folderu, musimy to zrobić jako administrator (tj. Użyć sudo).

Jeżeli jesteś pewien, że chcesz, możesz usunąć everyone „s śmieci poprzez usunięcie całego .Trashesfolderu z poleceniem:

sudo rm -R /Volumes/volumeName/.Trashes

Ostrzeżenie: jak w przypadku wszystkiego, co obejmuje sudo( „rób jak superużytkownik” , tj. Administrator systemu) i rm -Rużywaj tego ostrożnie. Niepoprawne wpisanie może mieć ... nieprzyjemne konsekwencje.

Gordon Davisson
źródło
„Może być w czyimś koszu” to dokładnie problem, na który wpadłem. To powinno być lepiej reklamowane!
cdeszaq
Dodanie przełącznika -f do polecenia wymusi akcję. Zastąpienie „volumename” słowem „*” pozwoli ci podłączyć wiele napędów USB i opróżnić wszystkie Kosze na wszystkich z nich jednocześnie. Nie musisz łączyć 1 na 1, a następnie wykonać ponownie.
Danijel-James W
Może to być niebezpieczne, aby uruchomić polecenie, które obejmuje zarówno sudo rmi /Volumes/*/something, ponieważ może to wpłynąć nawet dysku systemowego, a literówka może mieć złe konsekwencje.
gerlos
8

Zwykłe zachowanie:
gdy usuwasz coś z dysku USB, jest ono przenoszone do .Trashesfolderu na tym woluminie. Po podłączeniu do komputera usunięte elementy pojawią się w koszu ze wszystkimi pozostałymi elementami.

Po odłączeniu go elementy, które usunąłeś z tego dysku, nie będą już wyświetlane w koszu, dopóki nie włączysz go ponownie. Następnie możesz opróżnić kosz. Będzie naprawdę usunąć je z tego dysku.

Jeśli tak się nie dzieje, oto moja propozycja:

  1. Wybierz dysk na pasku bocznym Findera.
  2. Nie wybierając niczego innego, naciśnij cmd-i(lub użyj elementu menu FileGet Info).
  3. Użyj Sharing and Permissionssekcji tego okna, aby nadać Everyoneuprawnienia Read and Write.
Nathan Greenstein
źródło
Należy to zaakceptować
zsitro
7

Nie wiem, czy to najlepsza odpowiedź, ale przynajmniej działa.

Otwórz wiersz poleceń, przejdź do woluminu USB (/ Volumes / USB w moim przypadku) i wpisz:

/bin/rm -rf ./Trashes/* works fine with me.
prosseek
źródło
Wymagałoby to, aby użytkownik musiał za każdym razem przechodzić do określonej objętości. W oparciu o twoją odpowiedź opracowałem skrypt Bash i rozwiązanie AppleScript.
Danijel-James W
2

2 rozwiązania. 1 za pomocą Bash drugi za pomocą Bash owinięty w AppleScript

Rozwiązanie nr 1

  1. Utwórz nowy AppleScript za pomocą /Applications/Utilities/AppleScript Editor
  2. Wpisz następujący kod:

    wykonaj skrypt powłoki „rm -rf /Volumes/*/.Trashes/*” z uprawnieniami administratora

  3. Zapisz plik w dogodnym miejscu i uruchom go, gdy zajdzie potrzeba wyczyszczenia Kosza USB
  4. Można to zrobić, klikając go dwukrotnie

UWAGA: Spowoduje to opróżnienie Kosza dla wszystkich podłączonych woluminów, w tym wewnętrznego dysku twardego. Jeśli podłączyłeś 5 dysków USB i dysk twardy Firewire, spowoduje to opróżnienie kosza na wszystkie z nich.


Rozwiązanie nr 2

  1. Odpal swój ulubiony edytor tekstu (mój jest nano)
  2. Wklej następujący kod do edytora tekstu i zapisz plik

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

  3. Zapisz plik w dogodnym miejscu z rozszerzeniem, .sha następnie włącz go w chmod +x {filename}.shTerminalu

  4. Uruchom to z ./{filename}.sh

UWAGA: Ta sama uwaga jak powyżej. Jest to wykonywalne z terminala.

Danijel-James W.
źródło
2

Używam tego skryptu AppleScript, zapisz go jako aplikację:

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

Przeciągnij / upuść woluminy w aplikacji.

Ten skrypt usuwa elementy z folderu kosza (ID użytkownika) na woluminie. jeśli inni użytkownicy będą korzystać z woluminu, ten skrypt nie usunie elementów z folderu kosza, w przeciwnym razie skrypt będzie potrzebował do tego hasła administratora.


Jeśli chcesz wysunąć wolumin po opróżnieniu kosza, użyj tego skryptu.

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
źródło
Aby uruchomić skrypt AppleScript, po prostu przeciągnij podłączone urządzenie lub dysk do aplikacji AppleScript i upuść. Dla wygody możesz utworzyć alias w doku obok zwykłego kosza, przeciągając i upuszczając ikonę aplikacji do bocznego doku.
Tony_kenya