Как удалить каталог, который содержит безымянные файлы?

6434
David Z

Я пытаюсь удалить предположительно пустой каталог в файловой системе 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
Вы пробовали `rm -rf / path / to / thedirectory`? Andrew Lambert 12 лет назад 0
Глупый я, я совсем забыл включить этот вывод ;-) но да, именно это и привлекло мое внимание к проблеме. David Z 12 лет назад 0
Что значит `ls -N | кошка-а печатать? Keith Thompson 12 лет назад 0
Я тоже отредактировал это в вопросе. David Z 12 лет назад 0

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

1
Andrew Beals

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

Не повезло, запуск с `sudo` не удался так же. David Z 12 лет назад 0
Тогда у вас есть ошибка в файловой системе. fsck ничего не сообщает? Andrew Beals 12 лет назад 1
Я еще не запускал fsck, потому что сначала мне нужно размонтировать файловую систему. David Z 12 лет назад 0
1
Christopher Neylan

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

$ ls -iN | cat -A 794539 $ $ find . -inum 794539 -exec rm -i {} \; 
глядя на отметку времени, я, кажется, опаздываю на вечеринку: - / Christopher Neylan 12 лет назад 0
Извините, я никогда не замечал этого здесь. Я немного позже отвечаю, я думаю: -PI больше не имеет доступа к рассматриваемой файловой системе, но я не думаю, что это сработает, потому что ему нужно имя файла для передачи в `rm`. _Might_ работал, чтобы использовать опцию find `-delete`, и если я когда-нибудь получу возможность проверить это, я попробую. David Z 7 лет назад 0
0
Avery Payne

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

ls -la /name/of/path 

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

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

rm -rf /name/of/path/* 

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

rm -rf * 

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

rm -rf /name/of/path 

или же

rm -rf ./* 

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

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