Один и тот же файл, другой размер файла

12

Я сделал резервную копию с моего FTP-сервера, используя lftp и Transmit (приложение Mac). Все хорошо, но есть разный размер файла для 1-2 файлов, но они идентичны.

Первый файл:

http://dl.dropbox.com/u/229956/deadcow_seo.php

Второй файл:

http://dl.dropbox.com/u/229956/deadcow_seo.php_2.php

В чем разница между этими двумя файлами?

user66638
источник
Вы уверены, что проблема была не только в заявленном размере? Apple несколько лет назад изменила способ представления Mac OS X дискового пространства, чтобы соответствовать методу, который используют производители жестких дисков. Вместо 1 МБ = 1024 КБ они используют 1 МБ = 1000 КБ. Ваш хост Linux может сообщать о другом размере, используя другую методологию, поэтому файлы могут иметь разные размеры. Не уверен, что это применимо в вашем случае, но тем не менее это интересно.
WebDevKev
Это не то. Просто посмотрите на файлы, которые он предоставил как часть вопроса, или снимок экрана различий в моем ответе. Между прочим, файлы не достаточно велики, чтобы иметь значение, по 1800-1900 байтов каждый.
Даниэль Бек

Ответы:

25

deadcow_seo.phpиспользует окончания строк Unix ( LF), а deadcow_seo.php_2.phpокончания строк DOS / Windows ( CR LF).

FTP имеет несколько «режимов передачи», из которых два находятся в общем пользовании 1 - двоичная (также называемый «образ») и текст (или «ASCII»). В «двоичном» режиме файл передается точно так, как он есть, побайтово, а «ASCII» заставляет файл интерпретироваться как состоящий из строк текста - окончания строк CR LFпри отправке преобразуются в сетевой стандарт , и преобразуется в родные окончания строки машины при получении.

Передача файлов в виде текста поначалу может иметь некоторый смысл, но это только позже вызывает проблемы - фактически, некоторые FTP-серверы полностью удалили его или сделали его эквивалентным двоичному на стороне сервера. Кроме того, большинство текстовых редакторов (исключая Блокнот) могут читать и сохранять файлы в форматах Windows и Unix.

Просто настройте свой FTP-клиент так, чтобы он всегда использовал двоичный режим - обычно это команда binили mode i, в то время как графические клиенты могут иметь флажок или список типов файлов в своих настройках.


1 Некоторыми старыми режимами являются «tenex» ( давно устаревший, для файлов на основе страниц TENEX) и «сжатый» (который, похоже, определяется как простой алгоритм RLE). Последние FTP-серверы поддерживают «режим z» для сжатия zlib.

user1686
источник
12

Вы использовали текстовый (или 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. Большинство редакторов способны изменить режим окончания строки.

Даниэль Бек
источник