Rinomina il file con un nome strano sul supporto Samba


10

Voglio rinominare il file con un nome strano in qualcosa di ragionevole, tuttavia non sono in grado di: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Ho provato a utilizzare il numero di inode come raccomandato in alcuni punti di Internet:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Cosa dovrei fare?


1
Qual è l'output di un semplice lsin quella directory? Il file è mostrato come un file normale? Sto chiedendo di accertarmi che si No such file or directorytratti di un errore sconvolgente e non indicativo di un file system danneggiato.
terdon

1
Mi chiedo se il filesystem debba essere eseguito fsck? Potrei essere corrotto. In che modo il file ha acquisito quel nome?
Kusalananda

1
@Mioriin I punti interrogativi nel nome del file sono (o potrebbero essere) segnaposto per i caratteri che non possono essere visualizzati. (un motivo per non analizzare mai l'output di ls)
Kusalananda

1
Potrebbe trattarsi di un problema con i caratteri del terminale. Sta mostrando ?per le lettere che non può essere visualizzato. Prova a passare a un carattere completamente Unicode.
Mio Rin,

5
@Mioriin Se il nome del file può essere visualizzato o meno è un po 'un'aringa rossa in questo caso, penso. La cosa strana è che la shell è in grado di espandersi *_000c.jpgma che mvquindi non può elaborare il file. Questo è, IMHO, indicativo di un filesystem corrotto. ... o forse di un filesystem montato su una condivisione di rete che è andata via (con le voci della directory ancora memorizzate nella cache) o qualcosa del genere.
Kusalananda

Risposte:


16

Riepilogo dei commenti pertinenti:

I file system Unix consentono qualsiasi carattere nel nome di un file tranne \0(nul) e /(barra). Il fatto che lsmostri i punti interrogativi è solo perché non può visualizzare alcuni dei caratteri del nome file nella locale corrente (che è uno dei motivi per cui dovresti evitare di analizzare l'output dils ).

Tuttavia, con una condivisione Samba, apparentemente hai requisiti più rigidi sui nomi dei file che su un filesystem Unix standard.

Poiché il file aveva un nome "illegale" nella condivisione Samba intermedia, il file era inaccessibile con il nome corretto sulla macchina che montava la condivisione.

Il mvnon ha funzionato dal momento che il nome restituito dalla condivisione di Samba per l'espansione del modello globbing non era il nome effettivo del file sul filesystem di hosting, solo propria versione di Samba straziato del nome.

La soluzione era quella di accedere al server che effettivamente ospitava il file (su un filesystem con regole di denominazione meno restrittive rispetto a Samba) e modificare lì il nome del file. Questo è stato il modo corretto di agire.

Vedi anche la chat Unix e Linux su questa domanda .


-2

Prima di imparare a citare le shell unix, avrei usato la diredmodalità emacs per rinominare o eliminare i file difficili da abbinare. Apri semplicemente la directory in emacs:

emacs -q .

... quindi è possibile utilizzare i tasti freccia per navigare al file che si desidera modificare e rinominare il file con R. ?ti darà l'elenco dei comandi disponibili (puoi eliminare anche i file difficili da trovare).

Allora C-x C-cesci da emacs e il gioco è fatto.


-3

Spesso con nomi di file insoliti è possibile aggiungere "./" prima che il nome file e Linux lo riconoscano correttamente. Ad esempio: $ ls ./?j?Z?R?C1_000c.jpg

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.