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

som*_*ing 13 filenames files

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

为什么当第二个得救时他们没有成为一个?

Sté*_*las 39

也许他们只是看起来像他们有相同的名字。

尝试:

$ touch Ste?phane Stéphane Stéphane\  St?éphane
$ ls -1
Ste?phane
Stéphane
St?éphane
Stéphane 
Run Code Online (Sandbox Code Playgroud)

它们看起来几乎一样。

$ ls -1b
Ste?phane
Stéphane
St?éphane
Stéphane\ 
Run Code Online (Sandbox Code Playgroud)

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

$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\ 
St\342\200\213\303\251phane
Run Code Online (Sandbox Code Playgroud)

现在我们在谈论(所有非 ASCII 字符都被呈现为其字节组成部分的八进制值)

你也可以这样做,这适用于任何输入:

$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $
Run Code Online (Sandbox Code Playgroud)

在这里,行尾标有$,这样可以更容易地发现尾随空格。但是,这无助于发现名为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>
Run Code Online (Sandbox Code Playgroud)

更清楚发生了什么。

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

  • `sed` 的 `l` 命令以视觉上明确的形式显示输入。使用 LC_ALL=C,我们确保它只使用 ASCII 字符(尽管至少对于 GNU `sed`,这不是必需的)。 (3认同)
  • @StéphaneChazelas 您也可以使用:`LC_ALL=C ls -b` (2认同)