После ошибки памяти в моей программе я застрял в файле со странным именем файла. Это довольно устойчиво ко всем обычным методам удаления файлов со странными именами.
Имя файла:
% 8BUȅ҉% 95D% F8% FF% FF\ X0F% 8E% 8F% FD% FF% FF% 8B% B5T% F8% FF% FF% 8B% 85\% F8% FF% FF\ x03% 85x% F8% FF% FF% 8B% 95D% F8% FF% FF% 8B% BD% 9C% F8% FF% FF% 8D\ x04% 86% 8B% B5 @% F8% FF% FF% 89% 85% 90% F8 % FF% FF% 8B% 85X% F8% FF% FF\ x03% 85% 9C% F8% FF% FF% С1% Е7\ x02% 8B% 8Dx
Я попробовал следующее:
rm *
- →
No such file or directory
rm -- filename
- →
No such file or directory
rm "filename"
- →
No such file or directory
ls -i
чтобы получить номер инода- →
No such file or directory
stat filename
- →
No such file or directory
- zip каталог, в котором находится файл
- →
error occurred while adding "" to the archive
- удалить каталог в поиске
- →
error -43
- в Python:
os.unlink(os.listdir(u'.')[0])
- →
OSError
-No such file or directory
find . -type f -exec rm {} \;
- →
No such file or directory
- проверил наличие блокировки файла с помощью
lsof
- →
no locks
Все эти попытки приводят к тому, что файл (длинное имя файла здесь) не найден, или ошибка -43. Даже ls -i
.
Я не мог найти больше вариантов, поэтому, прежде чем переформатировать или восстановить мою файловую систему (fsck
может помочь), я подумал, что, возможно, что-то упустил.
Я написал эту небольшую программу на C, чтобы получить номер инода:
#include <stdio.h>
#include <stddef.h>
#include <sys/types.h>
int main(void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp)) {
printf("d_ino=%ld, ", (unsigned long) ep->d_ino);
printf("d_name=%s.\n", ep->d_name);
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
Это работает. Теперь у меня есть номер индекса , но обычный find -inum inode_num -exec rm '{}' \;
не работает Я думаю, что я должен использовать clri
сейчас.