Я пытаюсь удалить предположительно пустой каталог в файловой системе ReiserFS, но не могу, потому что система rm
постоянно жалуется, что каталог не пуст.
$ rm -rf thedirectory
rm: cannot remove `thedirectory': Directory not empty
$ ls -a thedirectory
. ..
Проблема в том, что все, что я делаю, чтобы попытаться определить, что на самом делеявляетсяв каталоге, кажется, показывает, что есть три файлабез имен. Например:
$ cd thedirectory
$ ls
ls: cannot access : No such file or directory
ls: cannot access : No such file or directory
ls: cannot access : No such file or directory
$ find .
.
./
./
./
$ ls -N | cat -A
$
$
$
Поскольку я не могу получить имена файлов, я не могу запустить stat
или сделать что-либо полезное с этими загадочными файлами. A stat
в самом каталоге дает, казалось бы, нормальные результаты:
$ stat .
File: `.'
Size: 192 Blocks: 0 IO Block: 4096 directory
Device: 807h/2055d Inode: 825484 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ diazona) Gid: ( 1000/ diazona)
Access: 2012-01-27 16:32:45.000000000 -0500
Modify: 2012-01-27 16:31:58.000000000 -0500
Change: 2012-01-27 16:31:58.000000000 -0500
Я предполагаю, что здесь замешано какое-то повреждение файловой системы, что, вероятно, означает, что мне придется выключить, загрузиться с живого USB-накопителя и попытать счастья с reiserfsck
. Но есть ли более простой способ справиться с этим?
решение1
Присвоение -f
флага rm означает, что он не будет жаловаться, когда не может что-то сделать, например, попытаться удалить файл, принадлежащий другому пользователю (например, root), или у вас нет прав на запись в каталог. sudo rm -rf /path/to/thedirectory
Без сомнения, это уничтожит каталог и файлы в нем. ls -B thedirectory | cat -ve
Также может быть показательным.
решение2
Пробовали ли вы удалить inode напрямую?
$ ls -iN | cat -A
794539 $
$ find . -inum 794539 -exec rm -i {} \;
решение3
Вы можете просмотреть все файлы с помощью
ls -la /name/of/path
...который выдаст вам длинный список, включая все точечные файлы.
Чтобы удалить каталог и все его содержимое, включая другие подкаталоги, используйте:
rm -rf /name/of/path/*
...хотя будьте осторожны, если вы планируете использовать подстановочный знак, который приводит к (печально)известному утверждению:
rm -rf *
...что действительно опасно даже для "обычных пользователей". Если вам когда-нибудь понадобится использовать подстановочный знак, я бы посоветовал:
rm -rf /name/of/path
или
rm -rf ./*
... последний с точкой и косой чертой выполняется с предположением, что вы находитесь «внутри» каталога, который хотите очистить... вам все равно придется перейти на один каталог вниз и удалить его извне.