Beim Auspacken eines ls
Tarballs bin ich auf ein Verzeichnis gestoßen, das als "??????????????? ?????" gemeldet wird. Vermutlich ist der Name nicht in Unicode? Wie auch immer, ich kann keine Möglichkeit finden, auf den Ordner zuzugreifen. Ich habe es versucht cd $(find -inum inode_number)
, aber das gibt mir
"bash: cd: ./??????????: No such file or directory".
Gibt es eine andere Möglichkeit, direkt über die Inode-Nummer auf einen Ordner zuzugreifen?
filenames
inode
directory-listing
jackd243
quelle
quelle
cd */
könnte es funktionieren.*
sollte eine Shell verständliche Beschreibung des Verzeichnisses erweitern undcd
zusätzliche Argumente ignorieren. Eine andere Möglichkeit könnte darin bestehen, einen grafischen Dateimanager (einschließlich des terminalbasierten MC) oder die in Vim integrierten Dateibaumnavigatoren zu verwenden. Sie können auch direkt mit dem-exec
Wechsel zufind, not with
cd` experimentieren (was eine integrierte Shell ist), aber mit zBls
und anderen Tools.cd
schlägt mit mehreren Argumenten fehl.too many arguments
" beendet.Antworten:
Ein allgemeiner Ansatz, um mit jedem Verzeichnis (oder jeder Datei) arbeiten zu können, besteht darin, die Inode-Nummer zu verwenden.
Verwenden Sie zunächst ls, um den Inode des betreffenden Ordners abzurufen:
-l
für lange Auflistung (optional)-i
um Inode-Werte zu erhalten-a
um alle Dateien anzuzeigen, auch versteckte Dateien (optional)In der Liste sehen Sie eine lange Zahl in der ersten Spalte, ungefähr so:
Jetzt können Sie in dieses Verzeichnis wechseln, indem Sie:
... aber ersetzen Sie ###### durch die lange Nummer, die Sie in der Verzeichnisliste erhalten haben.
Natürlich muss der Befehl nicht sein
cd
. Es könnte seinrm
,cp
,mv
, etc ...quelle
Da es sich bei den Zeichen wahrscheinlich um internationale Zeichen handelt, werden sie wahrscheinlich als Steuercodes in Ihrem en_US-Zeichensatz angezeigt, weshalb ls sie als Fragezeichen anzeigt.
Dies kann daran liegen, dass Ihre Distribution standardmäßig Aliasing-Ls im globalen Profil auswählt. Zum Beispiel:
Sie können feststellen, ob Ihre Distribution dies getan hat, indem Sie in Ihre Shell eingeben:
Welches wird so etwas wie das folgende ausdrucken:
Die unten verlinkte Seite schlägt vor, dass bei "ls -b" die oktalen Steuercodes angezeigt werden, damit Sie zumindest wissen, welche Zeichen verwendet werden.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
Vorausgesetzt, das funktioniert nicht, haben Sie eine andere Option, die dort weiter unten erwähnt wird:
Ein mir bisher unbekanntes Tool namens OctalDump (auf Debian - / usr / bin / od)
Zeigt Ihnen die oktale Form der Steuercodes.
Zeigt Ihnen die Zeichen einschließlich aller versteckten zusätzlichen Leerzeichen am Ende (beachten Sie die zusätzlichen Leerzeichen am Ende in ihrem Beispiel).
Sobald Sie wissen, welche Steuerzeichen im Spiel sind und ob zusätzliche versteckte Leerzeichen vorhanden sind, können Sie möglicherweise einen Weg finden, um in das Verzeichnis zu gelangen, indem Sie die Steuerzeichen maskieren. Andernfalls haben Sie mehrere Möglichkeiten, das Verzeichnis umzubenennen.
Die obige Seite enthält auch eine schnelle und schmutzige Methode zum Entfernen der Steuerzeichen über den Befehl mv, die meiner Meinung nach funktionieren wird, solange Sie das Leerzeichen verlassen, aber NICHT den Fragezeichen entkommen (wodurch sie zu einem einzelnen Zeichen werden) Platzhalter), und solange nichts anderes in dem Verzeichnis vorhanden ist, in dem sich dieses Schurkenverzeichnis befindet. Der Grund für diese expliziten Anforderungen liegt darin, dass Sie nur Platzhalterzeichen und das einzelne Leerzeichen verwenden und daher nicht möchten, dass der Platzhalter versehentlich mit einer anderen Datei oder einem anderen Verzeichnis übereinstimmt.
Wenn die oben beschriebene Methode nicht funktioniert, können Sie die in anderen Antworten erwähnte Suchmethode fast sicher auf andere Weise verwenden. Anstatt zu versuchen, mit der Inode-Nummer, die Sie versucht haben, in das Verzeichnis zu wechseln, können Sie es mit der Inode-Nummer umbenennen. Stellen Sie einfach sicher, dass Sie den gesamten Satz von 3 Zeilen für diesen einen Befehl von der obigen Seite kopieren (ersetzen Sie den Teil "gewünschter Name" durch den tatsächlichen Namen, in den Sie ihn jedoch umbenennen möchten).
Sobald das Verzeichnis umbenannt wurde, sollten Sie darauf zugreifen können. Ich kann nur hoffen, dass es nicht auch Dateien mit Steuercodes in den Namen enthält, oder Sie müssen für jede Datei (und / oder jedes Unterverzeichnis) in dem gerade umbenannten Verzeichnis spülen und wiederholen, an welchem Punkt eine for-Schleife wäre wahrscheinlich ist es ratsam, einfach jede Datei als Nummer zu benennen, indem Sie von 1 inkrementieren :-)
quelle
"?" hat eine besondere Bedeutung in der Shell, es bedeutet "jedes Zeichen, einschließlich keiner". Also, wenn Ihre Datei wirklich den Namen "??????????????? ?????" trägt. Sie müssen wahrscheinlich dem "?" (und Leerzeichen), damit Sie etwas wie cd \? \? \? \? \? \? \? \? \? \? \? \? (wenn du es nicht schon versucht hast)
Dies setzt voraus, dass jemand der Datei absichtlich diesen kniffligen Namen gegeben hat, anstatt diese verstümmelte / beschädigte / illegale Codierung.
quelle
ls
gerne angezeigt werden Nicht-ASCII - Zeichen (≥0x7F) als?
- so wahrscheinlich der Verzeichnisname nicht nur eine Reihe von Fragezeichen ist.Mach ein
ls
. Gibt es irgendetwas im Verzeichnis (Datei oder Unterverzeichnis) mit einem Namen, der länger ist als Ihr Mystery-Unterverzeichnis (21, wenn Ihr "????????????????????????????????????????????? genau)? Benennen Sie sie dann in kürzere Namen um oder verschieben Sie sie in andere Verzeichnisse. Geben Sie dann einDieser Platzhalter (20 Fragezeichen, gefolgt von einem Sternchen) sollte mit jedem Namen übereinstimmen, der 20 Zeichen lang oder länger ist - und die erste Anweisung, die ich gegeben habe, sollte sicherstellen, dass Ihr Mystery-Unterverzeichnis das einzige ist, das diesem Muster entspricht. Aber es könnte nützlicher sein, dies zu tun
quelle
ls
entweder--quoting-style=shell
oder die--quoting-style=escape
Option auszuführen , um zu erzwingen, dass eine ordnungsgemäß maskierte Version dieses Dateinamens erstellt wird.Eine einfache Möglichkeit, um zu sehen, was sich darin befindet, ist das FTP mit FileZilla auf den Computer. Anschließend können Sie das Verzeichnis mit FileZilla umbenennen.
quelle
Verwenden Sie einen Dateibrowser wie Midnight Commander (Text), Nautilus (GNOME) oder Dolphin (KDE), um mit dem Verzeichnis zu arbeiten.
quelle
um mit Verzeichnissen (oder Dateien) zu arbeiten, die seltsame / schwer einzugebende Namen haben:
1) Führen Sie aus
ls -i
, um den Inode der Datei zu ermitteln.Diese
ls
Option gibt Ihnen jeden Dateinamen und eine Kennung für diese Datei im Dateisystem (den Inode).2) Verwenden Sie find, um einen Befehl für die Datei auszuführen
Angenommen, die Inode war 9961926
du könntest rennen
um die Datei zu löschen
oder
um es zu einem besseren Namen zu verschieben
oder auch
um ihm einen neuen Namen zu geben, während der alte Name beibehalten wird
(Vermutlich könnten Sie auch andere Befehle ausführen. Leider konnte ich diese Zeile nicht verwenden, um a auszuführen.
cd
)quelle