我使用 lftp 和 Transmit(Mac 应用程序)从 FTP 服务器进行了备份。一切正常,但 1-2 个文件的文件大小有所不同,但它们是相同的。
第一个文件:
http://dl.dropbox.com/u/229956/deadcow_seo.php
第二个文件:
http://dl.dropbox.com/u/229956/deadcow_seo.php_2.php
这两个文件有什么区别?
答案1
deadcow_seo.php
使用 Unix 行尾 ( LF
),而deadcow_seo.php_2.php
使用 DOS/Windows 行尾 ( CR LF
)。
FTP 有几种“传输模式”,其中两种最常用1 –二进制(也称为“图像”)和文本(或“ASCII”)。在“二进制”模式下,文件将按原样逐字节传输,而“ASCII”模式会导致文件被解释为由文本行组成 -CR LF
发送时行尾将转换为网络标准,接收时将转换为机器的本机行尾。
以文本形式传输文件起初可能有些道理,但后来却会带来麻烦——事实上,一些 FTP 服务器已将其完全删除,或在服务器端将其等同于二进制。此外,大多数文本编辑器(Notepad 除外)都可以读取和保存 Windows 和 Unix 格式的文件。
只需将您的 FTP 客户端配置为始终使用二进制模式 – 命令通常是bin
或mode i
,而图形客户端在其设置中可能有一个复选框或文件类型列表。
1一些旧模式是“tenex”(长的过时的,用于 TENEX 基于页面的文件)和“压缩”(似乎被定义为简单的 RLE 算法)。最近的 FTP 服务器支持 zlib 压缩的“模式 z”。
答案2
你使用了文本(或 ASCII)传输模式,在传输过程中替换换行符。这通常适用于在 Windows 上开发脚本和程序并将文件传输到 Linux 或 Mac OS X 的情况。否则,它们根本无法工作,因为系统会在每一行末尾看到垃圾数据。
如果文件有一个 Windows 换行符\r\n
(或CRLF
),而您将其下载到 Linux 或 Mac OS X,则该文件将被替换为\n
(或LF
),少 1 个字节。使用 FileMerge 比较文件可在状态栏中确认这一点:
另请参阅关于数据解释的这个答案。
您可以在 Transmit 的首选项中配置哪些文件类型被解释为文本:
您可以从此列表中删除所有文件扩展名,并仅在 Linux/Mac OS X 换行符上进行标准化,即\n
,即使在使用 Windows 时也是如此。大多数编辑器都能够更改行结束模式。