Ich habe eine beschädigte tar-Datei entpackt und es geschafft, ein Verzeichnis zu finden, das ich nicht löschen kann. Wenn ich versuche, es zu löschen, kann es anscheinend nicht gefunden werden, ls
zeigt aber , dass es sowohl mit Bash als auch mit Python vorhanden ist Ähnliches Verhalten, außer dass ich gleich nach dem Versuch, es mit zu löschen rm -rf
, ls
beschwere, dass es es nicht finden kann, und es es dann auflistet (siehe weiter unten rm -rf
). Der find
Befehl zeigt an, dass die Datei vorhanden ist, mir fällt jedoch keine Möglichkeit zum Löschen ein.
Hier sind meine Versuche:
Hier sehen Sie beide ls
und find
stimmen zu, dass wir ein Verzeichnis haben,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Ich kann es aber nicht löschen:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove `./mikeaâ\302\201\302\204cnt': Is a directory
rl]$ ls
mikeaâ??cnt
Ich kann cd
es aber und es ist leer:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
siehe unten, das ist keine einfache Datei, sondern ein Verzeichnis. Außerdem ls
verhält es sich komisch, wenn rm -rf
es sagt, dass es die Datei nicht finden kann, und listet sie dann direkt danach auf:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove `mikeaâ\302\201\302\204cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
Das ist also der Versuch mit Python, die Datei wird gefunden, aber der Name kann nicht als Name verwendet werden, der gelöscht werden kann:
rl]$ python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import shutil
>>> os.listdir('.')
['mikea\xc3\xa2\xc2\x81\xc2\x84cnt']
>>> shutil.rmtree(os.listdir('.')[0] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/shutil.py", line 204, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/usr/lib64/python2.6/shutil.py", line 202, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mikea\xc3\xa2\xc2\x81\xc2\x84cnt'
Selbst wenn ich die Tab-Vervollständigung verwende, ist der Name, den es aufnimmt, nicht verwendbar:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Unter Verwendung des Namens, den Python mit Bash anzeigt, erhalte ich Folgendes:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Kann ich irgendetwas tun, um dieses korrupte Verzeichnis loszuwerden? Das zugrunde liegende Dateisystem (NFS) scheint funktionsfähig zu sein, und es wurden keine weiteren Probleme gemeldet. Bis zur Beschädigung der tar-Datei hatte ich keine derartigen Probleme.
BEARBEITEN: Hier wird die find
eigene -exec
Option zum Anrufen verwendetrm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
aber die datei ist immer noch da ( ls
beschwert sich, dass sie nicht gefunden werden kann, zeigt sie dann aber trotzdem an)
2. EDIT:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Das Verhalten ist noch unverändert, die Datei noch vorhanden
3. EDIT:
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} +
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Der Name scheint mehr zu bedeuten, als sich mikeaâcnt
die Ausgabe des Python-Versuchs mikea\xc3\xa2\xc2\x81\xc2\x84cnt
und den folgenden Screenshot anzusehen:
4. BEARBEITUNG: Dies ist der Versuch mit einem Platzhalter:
rl]$ echo *
mikeaâcnt
rl]$ echo mike*
mikeaâcnt
rl]$ rm -rf mike*
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
und mein Gebietsschema:
rl]$ locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
5. Änderung:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
aber auch das verhalten hat sich geändert, jetzt ls
und cd
mach das:
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt
mikeaâcnt: No such file or directory.
Dies geschah nach den Löschversuchen. Ich denke, es könnte sich um NFS-Probleme handeln, wie in einer der Antworten hier von vinc17 vorgeschlagen.
6. EDIT: Dies ist die Ausgabe von lsof
undls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ Äcnt lsof: Statusfehler auf mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt: Keine solche Datei oder Verzeichnis
oben ist falsch, hier ist der richtige lsof
Aufruf: (rl ist das übergeordnete Verzeichnis)
rl]$ /usr/sbin/lsof | grep mike | grep rl
tcsh 11926 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14733 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14734 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14735 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14736 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
rl]$
rl]$ ls -a
ls: cannot access mikeaâcnt: No such file or directory
. .. mikeaâ??cnt
7. Bearbeiten: Verschieben funktioniert nicht, (ich habe es vor all dem versucht, aber ich habe die Ausgabe nicht gespeichert ), aber es hat das gleiche Problem wie ls
und rm
mit der Datei.
8. BEARBEITEN: Dies verwendet die Hex-Zeichen wie vorgeschlagen:
rl]$ ls --show-control-chars | xxd
0000000: 6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.
rl]$ rmdir $'mikea\6d69\6b65\61c3\a2c2\81c2\8463\6e74\0acnt'
rmdir: failed to remove `mikea\006d69\006b651c3\a2c2\\81c2\\8463\006e74': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
9. Edit: für den stat
Befehl:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
Es scheint sogar wahrscheinlicher, dass bei der gesamten Ausgabe ein Fehler oder ein anderes NFS-Fehlverhalten vorliegt, wie in den Kommentaren vorgeschlagen.
Edit 10: Dies ist eine direkte Ausgabe in einer Liste, da sie so groß ist, die Ausgabe oder diese beiden Befehle:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
Edit 11: Also vor dem oben genannten habe rmdir
ich gemerkt, dass ich cd
in das Verzeichnis konnte, aber nach dem rmdir
konnte ich nicht cd
wieder, ähnlich wie gestern. Die .
und ..
Dateien waren vorhanden:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
Letzte Änderung: Ich habe einen lokalen Administrator gesehen, und es wurde behoben, indem ich mich beim Server selbst anmeldete und von dort aus löschte. Die Erklärung von ihnen ist, dass es ein Problem mit Zeichensätzen im Namen sein könnte, die unpassend sind.
mv
. Vielleicht kannst du es danach löschen. Alternativ können Sie versuchen, das Verzeichnis in eine tiefere Ordnerebene zu verschieben (möglicherweise mit einem Platzhalter) und dann den Ordner zu löschen, in den Sie es verschoben haben.
find
Ausgabe an einen anderen Befehl weiterleiten , anstatt nur dessenexec
Option zu verwenden?