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

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

Estou tentando excluir um diretório supostamente vazio em um sistema de arquivos ReiserFS, mas não consigo porque rmfico 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 statnada de útil nesses arquivos misteriosos. A statno 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 -fsinalizador 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/thedirectorysem dúvida irá destruir o diretório e os arquivos nele contidos. ls -B thedirectory | cat -vetambé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.

informação relacionada