Выгрузка мусора с USB-накопителя

41

У меня есть USB-накопитель, подключенный к моему Mac. То, что я обнаружил, .Trashesне было очищено при очистке корзины (щелкните правой кнопкой мыши значок корзины и запустите «Очистить корзину») для USB-накопителя.

Что может быть не так? Есть ли другой способ очистить USB-накопитель?

prosseek
источник
9
Интересно, что очистка корзины всегда происходит успешно для моих USB-накопителей. Моя единственная жалоба об этом является то , что часто я хотел бы только очистить корзину на моем USB - диске и не должны делать это для каждого диска в системе.
Мэтью Фредерик
4
@ Мэтью попробуйrm -R /Volumes/volumename/.Trashes/$UID
Гордон Дэвиссон
@ Гордон Отлично, спасибо! Для запуска команды был создан однострочный Applescript, и в любое время можно выполнить пару нажатий клавиш QuickSilver.
Мэтью Фредерик

Ответы:

36

Возможно, в корзине другого пользователя есть файлы . .TrashesПапки в верхней части каждого тома имеют вложенные папки для каждого другого пользователя, от пользователя идентификационного номера (например , 502 пользователей в мусоре в .Trashes/502).
Вы можете увидеть, если это для себя, с помощью такой команды (замените VolumeNameна имя вашего диска):

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

Как вы можете видеть, в моей .Trashesпапке на USB-диске есть подпапка, которая называется 502ID пользователя 502 (для справки, мой текущий идентификатор пользователя - 501). Так как этот пользователь не существует в моей системе, я вижу его как _unknown, и мой пользователь не может ни заглянуть внутрь, ни удалить его. Чтобы заглянуть внутрь этой папки, мы должны сделать это как администратор (то есть использовать sudo).

Если вы уверены, что хотите этого, вы можете удалить все ненужные файлы, удалив всю .Trashesпапку с помощью команды, например:

sudo rm -R /Volumes/volumeName/.Trashes

Предупреждение: как и в случае с чем-либо sudo( «делай как супер-пользователь» , то есть системный администратор), и rm -Rиспользуйте это осторожно. Если вы напечатаете это неправильно, это может иметь ... неприятные последствия.

Гордон Дэвиссон
источник
«Может быть, в чужой корзине» - именно та проблема, с которой я столкнулся. Это должно быть лучше рекламироваться!
cdeszaq
Добавление ключа -f к команде приведет к выполнению действия. Подстановка «Volumename» с «*» позволит вам подключить несколько USB-накопителей и очистить все корзины одновременно. Не нужно подключаться 1 к 1, а затем заново.
Даниэль-Джеймс W
Может быть опасно запускать команду, которая включает и то sudo rmи другое /Volumes/*/something, потому что это может повлиять даже на ваш системный диск, а опечатка может иметь плохие последствия.
герлос
8

Обычное поведение:
когда вы удаляете что-то с USB-накопителя, оно перемещается в .Trashesпапку на этом томе. При подключении к компьютеру удаленные элементы появятся в вашем мусорном ведре со всем остальным.

Когда вы отключите его, элементы, которые вы удалили с этого диска, больше не будут отображаться в корзине, пока вы не подключите его снова. Затем вы можете очистить корзину. Это действительно удалит их с этого диска.

Если это не происходит для вас, вот мое предложение:

  1. Выберите диск на боковой панели Finder.
  2. Не выбирая ничего другого, нажмите cmd-i(или используйте пункт меню FileGet Info).
  3. Используйте Sharing and Permissionsраздел этого окна, чтобы дать Everyoneразрешения Read and Write.
Натан Гринштейн
источник
Это должно быть принято
zsitro
7

Я не знаю, лучший ли это ответ, но, по крайней мере, это рабочий ответ.

Откройте командную строку, перейдите к разделу «Том USB» (/ Volumes / USB для моего случая) и введите:

/bin/rm -rf ./Trashes/* works fine with me.
prosseek
источник
Это потребовало бы, чтобы пользователь каждый раз заходил на определенную громкость. Основываясь на вашем ответе, я разработал сценарий Bash и решение AppleScript.
Даниэль-Джеймс W
2

2 решения. 1 используя Bash, другой используя Bash, завернутый в AppleScript.

Решение № 1

  1. Создайте новый AppleScript с /Applications/Utilities/AppleScript Editor
  2. Введите следующий код:

    сделать сценарий оболочки "rm -rf /Volumes/*/.Trashes/*" с правами администратора

  3. Сохраните файл в удобное для вас место и запускайте его всякий раз, когда вам нужно очистить корзину USB.
  4. Это можно выполнить, дважды щелкнув по нему

ПРИМЕЧАНИЕ. При этом корзина будет очищена для всех подключенных томов, включая внутренний жесткий диск. Если вы подключили 5 USB-накопителей и жесткий диск Firewire, он очистит корзину для всех из них.


Решение № 2

  1. Запустите ваш любимый текстовый редактор (мой нано)
  2. Вставьте следующий код в ваш текстовый редактор и сохраните файл

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

  3. Сохраните файл в удобном месте с расширением, .shа затем сделайте его исполняемым chmod +x {filename}.shиз терминала

  4. Запустите это с ./{filename}.sh

ПРИМЕЧАНИЕ. То же примечание, что и выше. Это исполняемый файл из терминала.

Даниэль-Джеймс W
источник
2

Я использую этот скрипт AppleScript, сохраняю его как Приложение:

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

Перетащите тома (ов) на приложение.

Этот сценарий удаляет элементы из вашей папки с мусором (ID пользователя) на томе. если другие пользователи используют том, этот сценарий не удалит элементы из папки «Корзина», в противном случае сценарию потребуется пароль администратора для этого.


Если вы хотите извлечь том после очистки корзины, используйте этот скрипт.

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
источник
Чтобы заставить appleScript работать, просто перетащите подключенное устройство или диск в приложение AppleScript и отпустите. Для удобства вы можете создать псевдоним в доке рядом с обычным мусорным баком, перетаскивая значок приложения в боковую док-станцию.
Tony_kenya