我的一个文件夹中的两个文件如何具有相同的名称?


12

我下载了两个文件,它们都保存到相同的文件名,然后我将它们通过scp传输到另一台计算机。

当第二个被保存时,为什么它们不成为一个?


2
你能显示ls -la取悦结果吗?
ryekayo 2014年

2
更好的是ls -lb(或者ls -lab,如果名称以开头.)。
G-Man说'恢复莫妮卡'

1
另外,到底发生了什么?您下载dir1/foodir2/foo在计算机X上下载,然后将scp它们添加到dir42计算机Y上,它们以相同名称的单独文件形式出现?还是您将两个具有相同名称的文件下载到了同一目录(在X机上),它们作为具有相同名称的单独文件出现了?
G-Man说'恢复莫妮卡'

Answers:


39

也许他们只是看起来像他们一样的名字。

尝试:

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

他们看起来几乎一样。

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

稍微好一些。空格字符被标记为\ (尽管并非所有ls实现都这样做)。

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

现在,我们正在讨论(所有非ASCII字符均表示为其字节组成部分的八进制值)

您也可以这样做,并且适用于任何输入:

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

在这里,行尾标记有$,这使得更容易发现尾随空间。但是,这将无助于发现一个名为Sté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>

使事情更加清楚。

有关该主题的更多信息,请参见此其他答案


1
如果您不介意我问Stephane,则管道命令的作用LC_ALL=C sed -n 1是什么?
ryekayo 2014年

3
sedl命令以视觉清晰的形式显示输入。使用LC_ALL = C时,我们确保为此仅使用ASCII字符(尽管至少使用GNU sed时没有必要)。
斯特凡Chazelas

2
@StéphaneChazelas您还可以使用:LC_ALL=C ls -b
vinc17 2014年

@ vinc17,很好,这也比sed更好地发现带有换行符的文件,但并不总是发现尾随空格。我已将其添加到答案中。
斯特凡Chazelas

该死,TIL,文件名的末尾可以有空格,并且看起来文件系统上有两个名称相同的文件。好的答案,ls | LC_ALL=C sed -n l真的真的节省了很多时间,谢谢!
Elijah Lynn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.