Как очистить мусор?

1946
Paul Tomblin

В моей корзине есть странный файл, который не исчезает, когда я очищаю корзину. Имя файла выглядит так:

␀␀␀õ␀␀.õ␀ 

Этот файл, очевидно, находится в / Volumes / NO NAME / .Trashes / 501 / («NO NAME» - это том моего загрузочного лагеря Windows, поэтому я даже не уверен, почему у него есть каталог .Trashes. Если я пытаюсь «ls» этот файл, или даже этот каталог, я получаю:

ls: \004␀␀␀õ\001␀␀.õ\001␀: File name too long 

То же самое происходит, если я пытаюсь использовать "sudo ls -le", "sudo ls -la" или "sudo ls -i".

И подобные результаты, когда я пытаюсь найти его или даже "найти. -Type f -print0 | sudo xargs -0 rm"

Как я могу избавиться от этого?

2
было бы хорошо проверить разрешения для этого, что вы получаете за ls -le? cobbal 14 лет назад 0
@cobbal, вы заметите, что я уже упоминал использование sudo, чтобы попытаться удалить его, верно? Paul Tomblin 14 лет назад 0

4 ответа на вопрос

3
cobbal

одна вещь, которую можно попробовать, это использовать вызовы более низкого уровня, чем ls, чтобы вывести каталог

python -c 'import os; print repr(os.listdir("/Volumes/NO NAME/.Trashes/501/"))' 

и если это работает, возможно, попробуйте использовать unlink()функцию

редактировать: отменить попытку

python -c 'import os; os.unlink("/Volumes/NO NAME/.Trashes/501/\x04\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80o\xcc\x83\x01\xe2\x90\x80\xe2\x90\x80.o\xcc\x83\x01\xe2\x90\x80")' 
Это работает, (возвращает ['\ x04 \ xe2 \ x90 \ x80 \ xe2 \ x90 \ x80 \ xe2 \ x90 \ x80o \ xcc \ x83 \ x01 \ xe2 \ x90 \ x80 \ xe2 \ x90 \ x80.o \ xcc \ x83 \ x01 \ xe2 \ x90 \ x80 ']), но я не знаю python, поэтому я не знаю, как использовать его, чтобы отсоединить файл. Я думаю, мне придется попробовать это в Perl. Paul Tomblin 14 лет назад 0
Perl, похоже, не делает этого. sudo perl -e 'opendir DIR, "."; while ($ line = readdir (DIR)) 'заканчивает перечислять файл, но не удаляет его. Paul Tomblin 14 лет назад 0
Результат от попытки удалить его в python: Traceback (последний вызов был последним): File "", строка 1, в OSError: [Errno 63] Имя файла слишком длинное: '/ Volumes / NO NAME / .Trashes / 501 / \ x04 \ xe2 \ x90 \ x80 \ xe2 \ x90 \ x80 \ xe2 \ x90 \ x80o \ xcc \ x83 \ x01 \ XE2 \ x90 \ x80 \ XE2 \ x90 \ x80.o \ XCC \ x83 \ x01 \ XE2 \ x90 \ x80' Paul Tomblin 14 лет назад 0
3
mark4o

У этого человека возникла та же проблема, и он исправил ее, выполнив проверку диска в Windows.

Удивительно, что у них тоже было почти одинаковое поддельное имя. Я думаю, что в драйвере файловой системы Mac OS FAT32 должна быть ошибка, позволяющая создать файл, который невозможно создать в файловой системе FAT32. Paul Tomblin 14 лет назад 0
2
Doug Harris

Вы пытались удалить с помощью inode?

ls -i 

покажет файлы и их номера inode

$ ls -i *.log 694197 alf.log 694719 mb.log 694181 fsck_hfs.log 24190 secure.log 802696 hdiejectd.log 694195 system.log 1094966 install.log 694396 windowserver.log 24189 ipfw.log 

Затем используйте find для удаления по inode (скажем, я хотел удалить mb.log сверху):

find . -inum 694719 -exec rm {} \; 
К сожалению, "ls -i" имеет ту же проблему: ls -i ls: \ 004␀␀␀õ \ 001␀␀.õ \ 001␀: слишком длинное имя файла Paul Tomblin 14 лет назад 0
1
jwaddell

Вы можете попробовать загрузиться в Windows и посмотреть, сможет ли он удалить файл (при условии, что он действительно его увидит).

Windows не будет читать раздел HFS + без помощи проприетарных инструментов. Чтобы добавить оскорбление раны, это только для чтения. LiraNuna 14 лет назад 0
Он сказал, что это был его загрузочный лагерь, поэтому он должен быть доступен для чтения Windows. mark4o 14 лет назад 1

Похожие вопросы