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

6481
David Z

Ich versuche, ein angeblich leeres Verzeichnis in einem ReiserFS-Dateisystem zu löschen, kann es jedoch nicht, weil es sich rmimmer wieder beschwert, dass das Verzeichnis nicht leer ist.

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

Das Problem ist, alles, was ich versuche zu tun, um zu bestimmen, was tatsächlich ist in dem Verzeichnis, scheint zu zeigen, dass es drei Dateien ohne 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 bekommen kann, kann ich statdiese Mystery-Dateien nicht ausführen . Ein statauf dem Verzeichnis selbst ergibt scheinbar normale Ergebnisse:

$ 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 das Dateisystem beschädigt ist, was bedeutet, dass ich herunterfahren, von einem aktiven USB-Laufwerk booten und mein Glück versuchen muss reiserfsck. Aber gibt es einen einfacheren Weg, um damit umzugehen?

3
Haben Sie 'rm -rf / path / to / thedirectory' ausprobiert? Andrew Lambert vor 12 Jahren 0
Dumm mich, ich habe die Ausgabe komplett vergessen ;-), aber ja, das war es, was mich in erster Linie auf das Problem aufmerksam gemacht hat. David Z vor 12 Jahren 0
Was bedeutet `ls -N | Katze -A` drucken? Keith Thompson vor 12 Jahren 0
Ich habe das auch in die Frage eingearbeitet. David Z vor 12 Jahren 0

3 Antworten auf die Frage

1
Andrew Beals

Wenn Sie das -fFlag an rm übergeben, bedeutet dies, dass es sich nicht beschwert, wenn es nicht etwas tun kann, z. B. der Versuch, eine Datei zu entfernen, die sich im Besitz eines anderen Benutzers befindet (z. B. root), oder Sie haben keine Schreibberechtigung für das Verzeichnis. sudo rm -rf /path/to/thedirectorywird zweifellos das Verzeichnis und die darin enthaltenen Dateien nuke. ls -B thedirectory | cat -vekann auch leuchten.

Kein Glück, mit Sudo zu laufen, schlägt auf dieselbe Weise fehl. David Z vor 12 Jahren 0
Dann haben Sie einen Fehler im Dateisystem. fsck meldet nichts falsches Andrew Beals vor 12 Jahren 1
Ich habe fsck noch nicht ausgeführt, weil ich das Dateisystem zuerst aushängen muss. David Z vor 12 Jahren 0
1
Christopher Neylan

Have you tried deleting the inode directly?

$ ls -iN | cat -A 794539 $ $ find . -inum 794539 -exec rm -i {} \; 
Wenn ich auf den Zeitstempel schaue, scheine ich zu spät zur Party zu sein: - / Christopher Neylan vor 12 Jahren 0
Sorry, ich habe das hier nie bemerkt. Ich antworte ein wenig später, denke ich: -PI hat keinen Zugriff mehr auf das betreffende Dateisystem, aber ich denke nicht, dass dies funktionieren würde, da der Dateiname an `rm` übergeben werden muss. Es hätte funktionieren können, um die "-delete" -Option von find zu verwenden, und wenn ich jemals die Gelegenheit habe, dies zu testen, probiere ich es aus. David Z vor 7 Jahren 0
0
Avery Payne

Sie können alle Dateien mit sehen

ls -la /name/of/path 

... das eine lange Liste mit allen Punktdateien enthält.

Um ein Verzeichnis und alles darin einschließlich aller anderen Unterverzeichnisse zu entfernen, verwenden Sie:

rm -rf /name/of/path/* 

... Seien Sie jedoch vorsichtig, wenn Sie das Platzhalterzeichen verwenden möchten, das zu der (in) berühmten Aussage führt:

rm -rf * 

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

rm -rf /name/of/path 

oder

rm -rf ./* 

Der letzte Punkt, bei dem der Punkt-Schrägstrich ausgeführt wird, mit der Annahme, dass Sie sich innerhalb des Verzeichnisses befinden, das Sie leeren möchten ... Sie müssen immer noch ein Verzeichnis nach unten verschieben und es außerhalb von sich selbst entfernen.