carattere speciale nel nome file (\ # 033OA)


10

Ho un leggero problema con un errore molto testardo durante un rsync. È causato da un file con un carattere speciale nel suo nome file. Ce ne sono stati altri ma potrei risolverlo facendo qualche conversione nella codifica del nome file. Tuttavia questo file non riesco nemmeno a trovarlo.

Quindi, ecco cosa dice rsync:

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

La prima cosa che si nota è che il codice del carattere non può essere esadecimale o ottale, quindi l'ho cercato su Google e ho trovato solo questo . Quindi potrebbe essere un CURSOR UPpersonaggio (o no). ho provato

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

inutilmente. Ho anche provato a reindirizzare l'output di ls di quella directory odsenza alcun risultato.

Cos'altro posso fare? O quale personaggio sto cercando comunque?

Grazie


1
Prova ls -b, che dovrebbe mostrare fughe in stile C
enzotib

grazie ... che ha aiutato ... potrebbe spostarlo con l'aiuto di printf, quindi ... se ripubbidi questo commento come risposta, lo accetterò volentieri :)
luxifer

Risposte:


9

È possibile utilizzare l' -bopzione a ls, che mostra i caratteri non grafici come sequenze di escape in stile C.


1

ls -aqstamperà tutti i nomi dei file, con un carattere al ?posto di ogni carattere non stampabile. Su molte varianti unix, ls -ABoppure ls -Ab(controlla la tua pagina man) stamperà le fughe ottali. Con ls -aq, è possibile utilizzare l'output visualizzato come modello di shell.

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

Un altro modo per ottenere il nome del file è in qualche modo utilizzare il completamento della shell: immettere mv .e premere Tabripetutamente fino a quando non viene inserito il nome strano.


ls -qnon ha mostrato il file mentre lo ha ls -bfatto. forse perché il suo nome file non era [weird-character]OA.texma in realtà`printf %b '\033OA'`.tex
luxifer

@luxifer C'è un .all'inizio del nome del file, quindi è necessario ls -Aqo ls -aq. E se usi i caratteri jolly della shell, devi rendere .esplicito: *non includerà il file ma lo .*farà.
Gilles 'SO- smetti di essere malvagio'

no non c'era! L'output che ho pubblicato proveniva da rsync ed era la fine della riga. Rsync copia $DESTINATION/.$FILENAMEprima prima di spostare il file sul nome corretto. Pertanto alla fonte il file non aveva .all'inizio del suo nome. Inoltre, come detto, ls -qnon avrebbe mostrato il file mentre lo ls -bfaceva.
luxifer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.