Wie Sie unten sehen können, haben die Dateien ungewöhnliche Zeichen.
Wenn Sie sie entweder im Terminal oder in Dolphin löschen, wird der Fehler zurückgegeben:
Datei oder Verzeichnis existiert nicht
Das Laufen ls -la
auf dem Verzeichnis gab mir diese Ausgabe:
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ?2?.???љ?!?Gb??σ?[?F?
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 3l??#g?w????O?JKB7?co??քH??bT?NA???S???X?I?A?qC??M?I???
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??8??-?@,?Zp?[?bI????7^?ñ[?ڏ??z?O???ч??eEȰ?+??,OF??h
Ich habe einen fsck
Befehl auf der Partition von einem anderen Betriebssystem ausgeführt, aber es hat sich nichts geändert.
Wie entferne ich diese Dateien?
files
filesystem
encoding
filename
karjedavpalaa
quelle
quelle
Antworten:
Ein einfacher Weg wäre, diese Dateien durch ihren Inode zu entfernen. :)
Verwenden Sie
ls -li
in dem Verzeichnis mit den ungewöhnlichen Zeichen, um die Inode-Nummer jeder Datei anzuzeigen, z.Verwenden Sie als Nächstes das
find
Dienstprogramm, um die entsprechende Datei anhand ihres Namens zu löschen. Verwenden Sie dazu die folgende Syntaxfind <somepath> -inum <inode_number> -exec rm -i {} \;
:Die
-i
Option zurm
ist nicht wirklich notwendig, ich habe sie nur hinzugefügt, um zu verhindern, dass Sie versehentlich Dateien entfernen, die Sie nicht entfernen wollten. :)rm
Für jede Datei, die Sie löschen möchten, werden Sie um Bestätigung gebeten.Wenn Sie mehrere Dateien nach ihren Inodes entfernen möchten, können Sie die
-o
(Bedeutungs- oder ) Syntax für Folgendes verwendenfind
:Sie können weitere Inode-Nummern hinzufügen, indem Sie den Ausdruck in Klammern um weitere
-o -inum <inode_number>
Ausdrücke erweitern.quelle
rm -ri .
?rm -ri .
löscht Dateien jedoch nicht nach Inode. Es durchsucht einfach das gesamte Arbeitsverzeichnis und fragt nach jeder Datei, ob Sie sie entfernen möchten - und Sie müssen sehr aufmerksam sein, nach welchen Dateien es suchen soll, um nicht versehentlich unerwünschte Dateien zu entfernen. Ich würde diesen Befehl auf keinen Fall für mein Home-Verzeichnis verwenden wollen - es enthält VIELE Dateien. ;)-inum
weistfind
an, nach Dateien anhand ihrer Inode-Nummer zu suchen. (2){}
stimmt mit den Dateien überein, die von gefunden wurdengrep
. (3) \ entgeht dem;
Symbol, das den an die-exec
Option von übergebenen Befehl beendetfind
. (4) Ich habe meine Antwort bearbeitet, um zu erklären, wie mehrere Dateien auf einmal entfernt werden.Es ist wichtig zu verstehen, dass dies nicht die Art von "Dateisystembeschädigung" ist,
fsck
die dabei hilft. Für das Dateisystem können Dateinamen eine beliebige Folge von Bytes sein , sofern kein einzelnes Byte den Wert 0x00 (ASCII-NUL, C-Zeichenfolgenendemarker) oder 0x2F (/
das Verzeichnistrennzeichen) hat. (Wenn ein Dateiname irgendwie ein 00- oder 2F-Byte enthält,fsck
sollte dies behoben werden.)Sie haben vielmehr Dateinamen, von denen die Anwendungssoftware (Dolphin
ls
) annimmt, dass sie Zeichen enthalten, die in Ihrem Gebietsschema nicht angezeigt werden können. Daher werden diese durch Platzhalterzeichen ersetzt. Sie können nicht geben Sie die Zeichen entweder, so dass die Dateien zu manipulieren schwieriger ist, aber man kann es so lange tun , wie Sie es , ohne jemals Typisierung zu tun oder zu kopieren und den Namen einfügen. Wenn Sie beispielsweise die Problemdateien direkt in Dolphin löschen oder umbenennen, sollte dies einfach funktionieren (ich würde sogar sagen, dass dies ein Fehler in Dolphin ist, wenn es nicht funktioniert).Wenn Sie in der Shell etwas dagegen unternehmen müssen (z. B. wenn sie Eigentum
root
eines GUI-Programms sind und daher nicht von einem GUI-Programm geändert werden können), können Sie sie indirekt mit "glob" -Mustern benennen, die in der richtigen Reihenfolge erweitert werden (s) von Bytes und weitergegeben.Jetzt möchten Sie natürlich nicht versehentlich Daten löschen, da Ihr Glob-Muster zu stark übereinstimmt. Daher empfehle ich, das Perl-
rename
Dienstprogramm zu verwenden, um jeden Dateinamen in seine Hex-Codierung zu konvertieren:Hierdurch werden keine Informationen zerstört - weder die Datei selbst noch die Bedeutung, die ursprünglich im Dateinamen enthalten war, bevor er beschädigt wurde. Es kann für bestimmte Dateien mit zB rückgängig gemacht werden
Achtung: Es gibt zwei Programme
rename
unterschiedlicher Herkunft. Die oben genannten Befehle funktionieren nur mit denen, die mit Perl erstellt wurden. In Ubuntu ist das, was Sie wollen, das aus dem "Rename" -Paket, nicht das aus dem "Util-Linux" -Paket.rename -h
wird unterscheiden: das ist, was Sie wollen ...... das ist nicht was du willst ...
Der Schlüssel zu suchen ist "perlexpr". Möglicherweise haben Sie eine ältere Version des Perl-Umbenennungsprogramms, die nicht alle oben genannten Optionen versteht. Der angezeigte Befehl sollte jedoch weiterhin funktionieren.
Edit: Unter 14.04 .5 unterstützt das enthaltene Perl-Skript
rename
den -h-Schalter nicht. Sie können bestätigen, dass Sie die richtige haben, indem Sie die Manpage überprüfen.man rename
In diesem Fall enthält die oberste Zeile Folgendes:quelle
file $(which rename)
gedruckt? (file
/usr/bin/rename: symbolic link to /etc/alternatives/rename
(file
ist standardmäßig installiert) Eigentlich muss man die symbolischen Links jagen, um zu bekommen/usr/bin/file-rename: a /usr/bin/perl -w script, ASCII text executable
,man rename
ist aber eine schnellere Anzeige ...--version
. Der Befehl, den ich vorgeschlagen habe, sollte immer noch funktionieren. (/usr/share/doc/rename/changelog.gz auf meinem Computer, auf dem Debian unstable ausgeführt wird, zeigt an, dass--version
es 2013 in Version 0.10 des Perl-Umbenennens hinzugefügt wurde. Ich bin überrascht, dass Ubuntu immer noch etwas älteres als dieses ausliefert. aber dieses Programm hat seine Funktionalität seit 2007 (!) nicht wirklich geändert, also ist es in Ordnung.)