Come possono due file in una delle mie cartelle avere lo stesso nome?


12

Ho scaricato due file, entrambi sono stati salvati nello stesso nome file e poi li ho trasferiti con scp su un altro computer.

Perché non sono diventati uno quando il secondo è stato salvato?


2
Puoi mostrare i risultati di per ls -lafavore?
Ryekayo,

2
Meglio ancora, ls -lb(o ls -lab, se il nome inizia con .).
G-Man dice "Ripristina Monica" il

1
Inoltre, cosa è successo esattamente? Hai scaricato dir1/fooe dir2/foosulla macchina X, poi scpli hai modificati dir42sulla macchina Y e sono usciti come file separati con lo stesso nome? Oppure hai scaricato due file con lo stesso nome nella stessa directory (sulla macchina X) e sono usciti come file separati con lo stesso nome?
G-Man dice "Ripristina Monica" il

Risposte:


39

Forse sembrano solo avere lo stesso nome.

Provare:

$ touch Stéphane Stéphane Stéphane\  St​éphane
$ ls -1
Stéphane
Stéphane
St​éphane
Stéphane 

Sembrano praticamente uguali.

$ ls -1b
Stéphane
Stéphane
St​éphane
Stéphane\ 

Un po 'meglio. Il carattere spazio è contrassegnato come \ (sebbene non tutte le lsimplementazioni lo facciano).

$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\ 
St\342\200\213\303\251phane

Ora stiamo parlando (tutti i caratteri non ASCII vengono visualizzati come valore ottale dei loro componenti byte)

Potresti anche farlo, e funziona per qualsiasi input:

$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $

Qui, la fine delle linee è contrassegnata con ciò $che rende più facile individuare lo spazio finale. Tuttavia, ciò non aiuterà a individuare un file chiamatoStéphane<newline>Stéphane

$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
       s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>

Rende più chiaro cosa è successo.

Vedi anche questa altra risposta per ulteriori informazioni sull'argomento.


1
Se non ti dispiace che chieda a Stephane, cosa fa il comando piped LC_ALL=C sed -n 1?
Ryekayo,

3
sedIl lcomando mostra l'input in forma visivamente inequivocabile. Con LC_ALL = C, ci assicuriamo che usi solo caratteri ASCII per questo (anche se almeno con GNU sed, non è necessario).
Stéphane Chazelas,

2
@ StéphaneChazelas Puoi anche usare:LC_ALL=C ls -b
vinc17

@ vinc17, buon punto, è anche meglio di sed individuare i file con caratteri di nuova riga, ma non sempre individuare lo spazio finale. L'ho aggiunto alla risposta.
Stéphane Chazelas,

Dannazione, TIL che puoi avere spazi alla fine di un nome di file e sembra che ci siano due file di nomi identici sul filesystem.! Ottima risposta, ls | LC_ALL=C sed -n lè stato davvero un grande risparmio di tempo proprio ora, grazie!
Elijah Lynn
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.