Sonderzeichen im Dateinamen (\ # 033OA)

10

Ich habe ein kleines Problem mit einem sehr hartnäckigen Fehler während eines Rsync. Es wird durch eine Datei mit einem Sonderzeichen im Dateinamen verursacht. Es gab andere, aber ich könnte das klären, indem ich die Kodierung des Dateinamens konvertiere. Allerdings kann ich diese eine Datei nicht einmal finden.

Hier ist also, was rsync sagt:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

Als erstes fällt auf, dass der Zeichencode nicht hexadezimal oder oktal sein kann, also habe ich ihn gegoogelt und nur diesen gefunden . Es kann also ein CURSOR UPCharakter sein (oder nicht). ich habe es versucht

ls -la *`printf '\033OA'`*

umsonst. Ich habe auch versucht, die Ausgabe von ls dieses Verzeichnisses odohne Erfolg weiterzuleiten.

Was kann ich sonst noch tun? Oder welchen Charakter suche ich überhaupt?

Vielen Dank

Luxifer
quelle
1
Versuchen Sie ls -b, die C-Stil Fluchten zeigen sollte
Enzotib
danke ... das hat geholfen ... könnte es dann mit Hilfe von printf verschieben ... wenn du diesen Kommentar als Antwort erneut postest, werde ich ihn gerne akzeptieren :)
luxifer

Antworten:

9

Sie können die -bOption to verwenden ls, die nicht grafische Zeichen als Escape-Sequenzen im C-Stil anzeigt.

Enzotib
quelle
1

ls -aqdruckt alle Dateinamen mit einem ?anstelle jedes nicht druckbaren Zeichens. Bei vielen Unix-Varianten ls -ABoder ls -Ab(überprüfen Sie Ihre Manpage) werden oktale Escapezeichen gedruckt. Mit ls -aqkönnen Sie die angezeigte Ausgabe als Shell-Muster verwenden.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Eine andere Möglichkeit, an den Dateinamen zu gelangen, besteht darin, die Vervollständigung Ihrer Shell zu verwenden: Geben Sie ein mv .und drücken Sie Tabwiederholt, bis der seltsame Name eingefügt wird.

Gilles 'SO - hör auf böse zu sein'
quelle
ls -qDie Datei wurde nicht angezeigt ls -b. Vielleicht, weil sein Dateiname nicht [weird-character]OA.texwirklich war`printf %b '\033OA'`.tex
Luxifer
@luxifer Am .Anfang des Dateinamens steht ein, also brauchen Sie ls -Aqoder ls -aq. Und wenn Sie Shell-Platzhalter verwenden, müssen Sie Folgendes .explizit angeben: *Die Datei wird nicht eingeschlossen, aber .*wird.
Gilles 'SO - hör auf böse zu sein'
nein gab es nicht! Die Ausgabe, die ich gepostet habe, war von rsync und es war das Ende der Zeile. Rsync kopiert zuerst nach, $DESTINATION/.$FILENAMEbevor die Datei auf den richtigen Namen verschoben wird . Daher hatte die Datei an der Quelle .am Anfang ihres Namens keine . Außerdem hätte, wie gesagt, ls -qdie Datei nicht angezeigt, obwohl ls -bdies der Fall war.
Luxifer