Como excluo um diretório que parece conter arquivos sem nome?

3

Estou tentando excluir um diretório supostamente vazio em um sistema de arquivos ReiserFS, mas não consigo porque rm continua 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 que eu faço para tentar determinar o que realmente é no diretório parece mostrar que há três arquivos sem 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 posso executar stat ou qualquer coisa útil nesses arquivos misteriosos. Um stat no próprio diretório gera 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 esteja envolvido algum tipo de corrupção no sistema de arquivos, o que provavelmente significa que tenho de desligar, inicializar a partir de uma unidade USB ativa e tentar a minha sorte com reiserfsck . Mas há alguma maneira mais fácil de lidar com isso?

    
por David Z 27.01.2012 / 23:11

3 respostas

1

Você já tentou deletar o inode diretamente?

$ ls -iN | cat -A
794539 $
$ find . -inum 794539 -exec rm -i {} \;
    
por 04.02.2012 / 16:26
1

Dar o -f flag para rm significa que ele não reclamará quando não puder fazer algo, talvez algo como tentar remover um arquivo de outro usuário (por exemplo, root) ou você não tenha permissões de gravação para o diretório. sudo rm -rf /path/to/thedirectory irá, sem dúvida, descobrir o diretório e os arquivos nele. ls -B thedirectory | cat -ve também pode ser esclarecedor.

    
por 27.01.2012 / 23:58
0

Você pode ver todos os arquivos com

ls -la /name/of/path

... que lhe dará uma longa lista, incluindo todos os arquivos de pontos.

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 à (famosa) declaração:

rm -rf *

... o que é perigoso, até mesmo para "usuários normais". Se você precisar usar o caractere curinga, sugiro que:

rm -rf /name/of/path

ou

rm -rf ./*

... o último com a barra de pontos sendo feita com a suposição de que você está "dentro" do diretório que deseja esvaziar ... você ainda precisará mover um diretório para baixo e removê-lo de fora em si.

    
por 28.01.2012 / 01:31