Gehe zu einem Verzeichnis mit unbekanntem Namen

Gehe zu einem Verzeichnis mit unbekanntem Namen

Beim Entpacken eines Tarballs stieß ich auf ein Verzeichnis, das lsals "??????????????? ?????" angezeigt wird. Vermutlich ist der Name nicht in Unicode? Jedenfalls kann ich keinen Weg 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?

Antwort1

Ein allgemeiner Ansatz, um mit jedem Verzeichnis (oder jeder Datei) arbeiten zu können, besteht darin, seine/ihre Inode-Nummer zu verwenden.

Rufen Sie zunächst mit „ls“ den Inode des betreffenden Ordners ab:

ls -lia
  • -lfür Langlistung (optional)
  • -ium Inode-Werte zu erhalten
  • -aum alle Dateien anzuzeigen, auch versteckte Dateien (optional)

In der Liste sehen Sie in der ersten Spalte eine lange Nummer, etwa so:

2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME

Jetzt können Sie mit folgendem Befehl in dieses Verzeichnis wechseln:

cd "$(find -inum ######)"

... aber ersetzen Sie ###### durch die lange Nummer, die Sie in der Verzeichnisliste erhalten haben.

Natürlich muss der Befehl nicht lauten cd. Er könnte lauten rm: , cp, mv,usw...

Antwort2

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 im globalen Profil einen Alias ​​für ls verwendet. Beispiel:

alias ls='ls -q'

Sie können feststellen, ob Ihre Distribution dies getan hat, indem Sie Folgendes in Ihre Shell eingeben:

alias ls

Das Ergebnis wird ungefähr wie folgt ausgedruckt:

$ alias ls
alias ls='ls --color=auto'

Auf der unten verlinkten Seite wird vorgeschlagen, dass bei der Eingabe von „ls -b“ die oktalen Steuercodes angezeigt werden, sodass Sie zumindest wissen, welche Zeichen verwendet werden.

http://www.arsc.edu/arsc/support/howtos/nonprintingchars/

Falls das nicht funktioniert, haben Sie eine andere Möglichkeit, die weiter unten ebenfalls erwähnt wird:

Ein mir bisher unbekanntes Tool namens OctalDump (unter Debian -- /usr/bin/od)

$ ls | od -b

Zeigt Ihnen die Oktalform der Steuercodes.

$ ls | od -c

Zeigt Ihnen die Zeichen einschließlich aller versteckten zusätzlichen Leerzeichen, die sich möglicherweise am Ende befinden (beachten Sie die zusätzlichen Leerzeichen am Ende im Beispiel).

Wenn Sie wissen, welche Steuerzeichen im Spiel sind und ob es zusätzliche versteckte Leerzeichen gibt, können Sie möglicherweise einen Weg finden, in das Verzeichnis zu wechseln, indem Sie die Steuerzeichen maskieren. Andernfalls haben Sie mehrere Möglichkeiten, das Verzeichnis umzubenennen.

Die obige Seite enthält außerdem praktischerweise eine schnelle und einfache Methode zum Entfernen der Steuerzeichen über den Befehl mv, die meiner Meinung nach funktionieren wird, solange Sie das Leerzeichen maskieren, aber die Fragezeichen NICHT maskieren (und sie so zu Platzhaltern für einzelne Zeichen machen) und solange nichts anderes in dem Verzeichnis vorhanden ist, in dem sich dieses Rogue-Verzeichnis 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 obige Methode nicht funktioniert, können Sie mit ziemlicher Sicherheit die in anderen Antworten erwähnte Find-Methode auf eine andere Weise verwenden. Anstatt zu versuchen, mit der Inode-Nummer in das Verzeichnis zu wechseln, was Sie angeblich versucht haben, können Sie es mit der Inode-Nummer umbenennen. Achten Sie nur darauf, den gesamten Satz von3Zeilen für diesen einen Befehl von der Seite oben (ersetzen Sie jedoch den Teil „gewünschter Name“ durch den tatsächlichen Namen, in den Sie ihn umbenennen möchten).

Sobald das Verzeichnis umbenannt ist, sollten Sie darauf zugreifen können. Ich kann nur hoffen, dass es nicht auch Dateien mit Steuercodes im Namen enthält, sonst müssen Sie den Vorgang für jede Datei (und/oder jedes Unterverzeichnis) im gerade umbenannten Verzeichnis wiederholen. An diesem Punkt wäre eine For-Schleife wahrscheinlich sinnvoll, um jede Datei einfach als Nummer zu benennen, indem man sie von 1 an hochzählt. :-)

Antwort3

"?" hat in der Shell eine besondere Bedeutung, es bedeutet "jedes Zeichen, auch keines". Wenn Ihre Datei also wirklich "??????????????? ?????" heißt, müssen Sie wahrscheinlich das "?" (und auch Leerzeichen) maskieren, also könnten Sie etwas wie cd \?\?\?\?\?\?\?\ \?\?\?\? (falls Sie es nicht bereits versucht haben) versuchen.

Dies setzt voraus, dass jemand der Datei absichtlich diesen kniffligen Namen gegeben hat und nicht eine verstümmelte/beschädigte/illegale Kodierung verwendet hat.

Antwort4

Eine einfache Möglichkeit, den Inhalt zu sehen, besteht darin, per FTP mit FileZilla auf den Rechner zuzugreifen. Anschließend können Sie das Verzeichnis mit FileZilla umbenennen.

verwandte Informationen