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


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

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


Вы уверены, что проблема была не только в заявленном размере? 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.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.