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.