Estou tentando excluir um diretório supostamente vazio em um sistema de arquivos ReiserFS, mas não consigo porque rm
fico reclamando que o diretório não está vazio.
$ rm -rf thedirectory
rm: cannot remove `thedirectory': Directory not empty
$ ls -a thedirectory
. ..
O problema é que tudo o que faço para tentar determinar o que realmenteéno diretório parece mostrar que existem três arquivossem nomes. Por exemplo:
$ 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
$
$
$
Como não consigo obter nomes de arquivos, não consigo executar stat
nada de útil nesses arquivos misteriosos. A stat
no próprio diretório produz resultados aparentemente normais:
$ 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
Suponho que algum tipo de corrupção do sistema de arquivos esteja envolvido, o que provavelmente significa que tenho que desligar, inicializar a partir de uma unidade USB ativa e tentar a sorte com o reiserfsck
. Mas existe alguma maneira mais fácil de lidar com isso?
Responder1
Dar o -f
sinalizador para rm significa que ele não reclamará quando não puder fazer algo, talvez algo como tentar remover um arquivo de propriedade de outro usuário (por exemplo, root) ou se você não tiver permissões de gravação no diretório. sudo rm -rf /path/to/thedirectory
sem dúvida irá destruir o diretório e os arquivos nele contidos. ls -B thedirectory | cat -ve
também pode ser esclarecedor.
Responder2
Você tentou excluir o inode diretamente?
$ ls -iN | cat -A
794539 $
$ find . -inum 794539 -exec rm -i {} \;
Responder3
Você pode ver todos os arquivos com
ls -la /name/of/path
...o que lhe dará uma lista longa, incluindo quaisquer arquivos de ponto.
Para remover um diretório e tudo dentro dele, incluindo outros subdiretórios, use:
rm -rf /name/of/path/*
... embora tenha cuidado se você planeja usar o caractere curinga, o que leva à (in) famosa declaração:
rm -rf *
...o que é realmente perigoso, mesmo para "usuários normais". Se você precisar usar o caractere curinga, sugiro:
rm -rf /name/of/path
ou
rm -rf ./*
... o último com a barra de ponto sendo feita supondo que você está "dentro" do diretório que deseja esvaziar ... você ainda precisará mover um diretório para baixo e removê-lo de fora dele.