3

Я пытаюсь удалить предположительно пустой каталог в файловой системе 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 или что-нибудь полезное для этих загадочных файлов. 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 . Но есть ли более простой способ справиться с этим?

3 ответа3

1

Установка флага -f для rm означает, что он не будет жаловаться, когда не может что-то сделать, например, попытаться удалить файл, принадлежащий другому пользователю (например, root), или у вас нет прав на запись в каталог. sudo rm -rf /path/to/thedirectory , несомненно, уничтожит каталог и файлы в нем. ls -B thedirectory | cat -ve также может быть светящимся.

1

Вы пытались удалить инод напрямую?

$ ls -iN | cat -A
794539 $
$ find . -inum 794539 -exec rm -i {} \;
0

Вы можете увидеть все файлы с

ls -la /name/of/path

... который даст вам длинный список, включая любые точечные файлы.

Чтобы удалить каталог и все внутри него, включая другие подкаталоги, используйте:

rm -rf /name/of/path/*

... хотя будьте осторожны, если вы планируете использовать подстановочный знак, что приводит к (в) известному утверждению:

rm -rf *

... что опасно, даже для "обычных пользователей". Если вам когда-либо понадобится использовать подстановочный знак, я бы предложил:

rm -rf /name/of/path

или же

rm -rf ./*

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .