beschädigte Verzeichnisse, Probleme beim Löschen

beschädigte Verzeichnisse, Probleme beim Löschen

Aufgrund eines Softwarefehlers gibt es in meinem Linux-System ein Verzeichnis mit Junk-Namen, wie Sie unten sehen können. Ich habe Probleme, sie zu löschen.

$ ll
total 1532
drwxr-xr-x   2 sensage sensage   4096 Apr 19 16:56 -?$??
drwxrwxr-x 248 sensage sensage   4096 Apr 23 11:37 .
drwxrwxr-x  99 sensage sensage   4096 Apr 16 14:23 ..
drwxr-xr-x   2 sensage sensage   4096 Apr  6 14:54 }???;?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 03:01 }??=?|
-rw-r--r--   1 sensage sensage     88 Apr 22 13:37 $
drwxr-xr-x   2 sensage sensage   4096 Apr  2 12:43 ?
drwxr-xr-x   2 sensage sensage   4096 Mar 20 02:51 ?=??&?
drwxr-xr-x   2 sensage sensage   4096 Apr 11 08:40 ?;%??;
drwxr-xr-x   2 sensage sensage   4096 Apr 14 09:38 ?:????
drwxr-xr-x   2 sensage sensage   4096 Mar 22 17:21 ?(?>~?
drwxr-xr-x   2 sensage sensage   4096 Apr  1 13:45 ?[???%
drwxr-xr-x   2 sensage sensage   4096 Apr  3 14:03 ?@????
drwxr-xr-x   2 sensage sensage   4096 Apr 12 16:18 ??
drwxr-xr-x   2 sensage sensage   4096 Apr 17 16:38 ??&???
drwxr-xr-x   2 sensage sensage   4096 Mar 25 02:43 ??+???
drwxr-xr-x   2 sensage sensage   4096 Apr 19 00:46 Ü¡?,??
drwxr-xr-x   2 sensage sensage   4096 Mar 28 18:54 ÚŸ??"?
drwxr-xr-x   2 sensage sensage   4096 Mar 27 01:04 ???(?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 22:41 ??ͨ?`
drwxr-xr-x   2 sensage sensage   4096 Apr 15 11:44 ?????-

Wie Sie sehen können, sind die Verzeichnisnamen blau. Wenn ich sie löschen möchte, erhalte ich die folgende Fehlermeldung:

$ ls -1  | grep -v 20 | xargs rm -rf 
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
rm: invalid option -- ¼
Try `rm ./'-¼$Þ¸Í'' to remove the file `-\274$\336\270\315'.
Try `rm --help' for more information.

was soll ich mit ihnen machen?

Antwort1

lsdruckt Nicht-ASCII-Zeichen (oder vielmehr Zeichen, die in der aktuellen Locale nicht unterstützt werden) als ?. Dies ist einer der Gründe, warum lses nicht sinnvoll ist, die Ausgabe von zu parsen. Die Ausgabe von lssollbetrachtete. In einigen Fällen, wie diesem, sind dies nicht die tatsächlichen Namen, die im Dateisystem vorhanden sind.

Versuchen Sie stattdessen etwas wie (diese werden löschenalleDateien und Verzeichnisse, einschließlich /path/to/dir)

rm -rf /path/to/dir

oder

find /path/to/dir -delete

oder

find /path/to/dir -exec rm -rf {} +

oder

find /path/to/dir -print0 | xargs -0 rm -rf

Passen Sie es Ihren Bedürfnissen an. Um nur Dateien zu löschen, fügen Sie in den Beispielen beispielsweise -type fnach dem Pfad hinzu:find

Nur tunrm -rf * in diesem Verzeichnis(das istwichtig, das aktuelle Arbeitsverzeichnis muss das Verzeichnis sein, dessen Dateien und Verzeichnisse Sie löschen möchten) kann auch ausreichend sein.

Siehe auchWarumnichtanalysieren ls?

Antwort2

Eine alternative Methode zum einfachen Entfernen von Verzeichnissen und/oder Dateien, deren Namen nicht druckbare Zeichen enthalten, besteht darin, die Inode-Nummer der fehlerhaften Verzeichnisse (oder Dateien) zu ermitteln und das Verzeichnis (oder die Datei) mithilfe dieser Nummer zu löschen:

cd /mypath || exit 1
ls -il    #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +

Die -xdevOption stellt sicher, dass findkeine Verzeichnisse auf anderen Dateisystemen absteigen. Inode-Nummern sind nur innerhalb eines Dateisystems garantiert eindeutig.

Fügen Sie „-f“ als zusätzliche findOption hinzu, um nur Dateien zurückzugeben.

verwandte Informationen