Wie lösche ich ein Verzeichnis, das scheinbar namenlose Dateien enthält?

Wie lösche ich ein Verzeichnis, das scheinbar namenlose Dateien enthält?

Ich versuche, ein angeblich leeres Verzeichnis auf einem ReiserFS-Dateisystem zu löschen, aber ich kann es nicht, weil ich rmständig beschwere, dass das Verzeichnis nicht leer sei.

$ rm -rf thedirectory
rm: cannot remove `thedirectory': Directory not empty
$ ls -a thedirectory
         .  ..

Das Problem ist, alles, was ich tue, um herauszufinden, was tatsächlichIstim Verzeichnis scheint zu zeigen, dass es drei Dateien gibtohne Namen. Zum Beispiel:

$ 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
$
$
$

Da ich keine Dateinamen abrufen kann, kann ich statdiese mysteriösen Dateien nicht ausführen oder sonst etwas Nützliches damit machen. Ein Aufruf statdes Verzeichnisses selbst führt zu scheinbar normalen Ergebnissen:

$ 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

Ich nehme an, dass eine Art Dateisystembeschädigung vorliegt, was wahrscheinlich bedeutet, dass ich herunterfahren, von einem aktiven USB-Laufwerk booten und mein Glück mit versuchen muss reiserfsck. Aber gibt es eine einfachere Möglichkeit, damit umzugehen?

Antwort1

Wenn Sie rm das -fFlag geben, beschwert es sich nicht, wenn es etwas nicht tun kann, beispielsweise wenn es versucht, eine Datei zu entfernen, die einem anderen Benutzer gehört (z. B. root), oder wenn Sie keine Schreibberechtigung für das Verzeichnis haben. Dadurch sudo rm -rf /path/to/thedirectorywerden das Verzeichnis und die darin enthaltenen Dateien zweifellos gelöscht. Dies ls -B thedirectory | cat -vekönnte auch aufschlussreich sein.

Antwort2

Haben Sie versucht, den Inode direkt zu löschen?

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

Antwort3

Sie können alle Dateien sehen mit

ls -la /name/of/path

...dadurch erhalten Sie eine lange Liste, einschließlich aller Punktdateien.

Um ein Verzeichnis und seinen gesamten Inhalt (einschließlich anderer Unterverzeichnisse) zu entfernen, verwenden Sie:

rm -rf /name/of/path/*

...aber seien Sie vorsichtig, wenn Sie das Platzhalterzeichen verwenden möchten, denn das führt zu der (un)berühmten Aussage:

rm -rf *

...was tatsächlich gefährlich ist, sogar für „normale Benutzer“. Wenn Sie jemals das Platzhalterzeichen verwenden müssen, würde ich Folgendes vorschlagen:

rm -rf /name/of/path

oder

rm -rf ./*

... das Letzte mit dem Punkt-Schrägstrich wird unter der Annahme ausgeführt, dass Sie sich „innerhalb“ des Verzeichnisses befinden, das Sie leeren möchten. Sie müssen dennoch ein Verzeichnis nach unten verschieben und es von außerhalb seines eigenen Verzeichnisses entfernen.

verwandte Informationen