Löschen einer beschädigten Datei unter Linux

Löschen einer beschädigten Datei unter Linux

Wie kann ich diese Datei löschen? Ich glaube, es ist eine beschädigte Datei in einem VFAT-Dateisystem.

?????????  ? ?       ?        ?            ? 100.jpg

Antwort1

inodeEine Möglichkeit besteht darin, die Nummer der Datei herauszufinden . Dies können Sie tun, indem Sie ausführen ls -i. Dadurch werden zwei Spalten zurückgegeben – die erste ist der Inode und die zweite der Dateiname. Sie können dann den findBefehl verwenden, um nur die Datei mit diesem bestimmten Inode auszuwählen und zu löschen.

sh-4.1$ ls -i .
  17921 somefile.ods
    169 someotherfile.conf
    305 -????????? ? ? ? ? ? 100.jpg
  18048 yetanotherfile.jpg

sh-4.1$ find . -maxdepth 1 -inum 305 -ok rm '{}' \;
< rm ... -????????? ? ? ? ? ? 100.jpg > ? y

Da der Inode höchstwahrscheinlich eindeutig für die Datei ist (sofern keine Hardlinks vorhanden sind), können Sie so ohne die mit Platzhaltern verbundenen Risiken löschen. Die maxdepthund die okOptionen des Find-Befehls machen es noch unwahrscheinlicher, dass Sie versehentlich auf die falsche Datei stoßen.

Antwort2

Ich bin nicht sicher, ob in einer der Antworten hier tatsächlich das von Stig gemeldete Problem vorkam. Ich bin gerade selbst auf dieses Problem auf meinem ext4-Dateisystem gestoßen:

# ls -l /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
total 0
?????????? ? ? ? ?            ? easy-rsa-master

# ls -i /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
? easy-rsa-master

# rm -r /tmp/dependencies
rm: descend into directory ‘dependencies’? y
rm: cannot remove ‘/tmp/dependencies/easy-rsa-master’: No such file or directory
rm: remove directory ‘dependencies’? y
rm: cannot remove ‘dependencies’: Directory not empty

Die Datei selbst war zusammen mit ihren Dateiattributen beschädigt. ls -i zeigt eindeutig keine Inode-ID an. Die Verwendung von rm funktioniert nicht. Sogar rm -rf durchsucht das Verzeichnis und versucht, die Datei direkt (und unbemerkt) zu löschen.

Meine Lösung bestand darin, das Verzeichnis ohne die fehlerhafte Datei neu zu erstellen. Anschließend können Sie das Verzeichnis an einen anderen Speicherort verschieben, z. B. /tmp. Es ist nach einem Neustart oder (hoffentlich) immer dann verschwunden, wenn Ihre Distribution das Verzeichnis /tmp bereinigt.

Antwort3

Ich würde eine etwas defensivere Version von cHaos Vorschlag empfehlen:

rm -i ./*100.jpg*

Die -imake-Datei rmfragt Sie, ob Sie jede Datei löschen möchten, die mit dem Platzhalter übereinstimmt. Dies stellt sicher, dass Sie nicht versehentlich auch andere Dateien löschen. Und die führende Datei ./stellt sicher, dass alle Dateinamen alsDateinamenund nicht weitere Optionen rm(es sieht aus, als ob Sie dort einen Bindestrich am Anfang hätten, deshalb ist dies wichtig).

Es ist übrigens möglich, dass es unsichtbare Charaktere gibtinnendie Zeichenfolge „100.jpg“. Wenn Ihnen oben eine Fehlermeldung wie „ rm: ./*100.jpg*: not found“ angezeigt wird, kann dies ls -1fw | cat -vhilfreich sein.

Antwort4

Sie könnten versuchen

rm *100.jpg*

Die ? sind entweder wörtliche Fragezeichen oder Zeichen, die keinen Sinn ergeben. In beiden Fällen kann das Betriebssystem selbst (und die Shell) die Datei normalerweise entfernen, wenn das Dateisystem nicht gelöscht ist.

Wenn das DateisystemIstEs ist jedoch durcheinander, das Löschen von Sachen kann es noch schlimmer machen. Ich würde empfehlen, dass Sie Windows starten, um das Laufwerk zu scannen und die Datei dort zu löschen, wenn Sie können.

verwandte Informationen