Как скопировать файлы с одного компьютера на другой без потери метаданных?

2909
Milind R

Подобный, но более сложный, чем этот вопрос: как копировать файлы, не изменяя время создания файла вообще?

Я хочу копировать файлы между компьютерами без указания даты «Изменено» и «Создано».

Цель состоит в том, чтобы сравнить diffнекоторый код проекта на 3 разных компьютерах, которые мне удалось синхронизировать, когда я работал над ними. Но я работал только на одной машине одновременно, и теперь я не помню, какая была самой последней. Это беспорядок, и я хочу объединить копии (и, надеюсь, поставить их под контроль версий) раз и навсегда.

Поэтому, когда я использую diffинструменты, знание дат изменения файла может помочь мне понять и объединить изменения.

2 из 3 компьютеров являются Linux, а 1 - Windows 8.

Любые другие способы достижения вышеизложенного, любые лучшие практики в таких ситуациях приветствуются.

1
`Dd`? Если серьезно, почему бы просто не начать с `git init` и посмотреть, куда вас это приведет? guaka 9 лет назад 0
(1) Второй ответ на вопрос, на который вы ссылаетесь, - «архивировать файлы». Почему это не достаточно хорошо для вас? (2) Linux, как правило, не поддерживает дату создания файла; поэтому вы просите что-то, чего не существует (и *** не может ***) существовать. (3) Почему дата модификации не подходит для ваших целей? Scott 9 лет назад 0
Как насчет монтирования файловых систем на одном из блоков Linux? Marcelo 9 лет назад 0
Я предполагаю, что системы подключены по локальной сети. В таком случае вы можете просто создать подключенный диск («Инструменты-> Подключить сетевой диск ...» в проводнике) и получить доступ к файлам из другой системы, фактически не делая копирование / вставку или изменения атрибутов. jjk_charles 9 лет назад 1
дд это то, что я бы использовал. http://www.linuxmanpages.com/man1/dd.1.php Запустите Sha-1 Hash для файла до и после, чтобы убедиться, что изображение является дубликатом судебной экспертизы. Сделайте загрузочный диск Kali, команды являются родными, и вы можете смонтировать fs в режиме ro. Ben Plont 9 лет назад 0
Информация о команде Sha-1: http://linux.about.com/library/cmd/blcmdl1_sha1sum.htm Ben Plont 9 лет назад 0
@KasperSouren см. [Мой комментарий] (http://superuser.com/questions/789532/how-to-copy-files-from-one-computer-to-another-without-losing-any-metadata#comment1036386_792912) Milind R 9 лет назад 0
@ Марсело Как? Samba? Я не могу физически подключить этот жесткий диск к Linux-машинам. Milind R 9 лет назад 0
@jjk_charles подключить сетевой диск на Windows-машине с Linux-машины, используя .... что? WebDAV? Samba? FTP? Milind R 9 лет назад 0
@BenPlont см. [Мой комментарий] (http://superuser.com/questions/789532/how-to-copy-files-from-one-computer-to-another-without-losing-any-metadata#comment1036386_792912) Milind R 9 лет назад 0
Ага. Samba / CIFS может монтировать общие папки Windows в Linux. Для другой коробки Linux, NFS будет хорошо. Marcelo 9 лет назад 1
@MilindR dd копирует файлы по крупицам. точные дубликаты. Если вы запустите хэш sha-1 для исходного файла, он даст вам отпечатки этих файлов. Если вы запускаете хэш sha-1 для копии, и он соответствует хешу исходного файла Sha-1, то вы знаете, что ваши метаданные не изменились. Вот почему я бы использовал этот метод. Ben Plont 9 лет назад 0
@MilindR, да, вы можете использовать Samba для достижения этой цели. jjk_charles 9 лет назад 0

4 ответа на вопрос

1
totti

Обычно есть три атрибута для файла / папки. Время создания, модификации и доступа. Во времени доступа нет особой важности. В Linux время создания не используется (и недоступно при использовании стандартных процедур). Таким образом, единственным важным атрибутом является время модификации. При копировании данных с помощью инструмента время изменения ОС не изменяется (по крайней мере, для Linux). Если это не так, вы можете сжать данные перед передачей и распаковать их на другом конце. Обычно инструменты резервного копирования сохраняют все атрибуты.
Если вы хотите строго сохранить все атрибуты, вы можете использовать следующие методы.

cpс опцией -aaka --archiveили --preserve = all
или
rsyncwith -t.

Эти команды доступны в Linux по умолчанию (также доступны для загрузки для Windows).
Если вас не интересуют инструменты командной строки, используйте инструмент синхронизации, который поддерживает копирование атрибутов, для копирования данных.

1
Community

If you're not sure what's the best code on the computers, I think it's best to copy all three source directories on one machine, then merge file by file. Merge tools.

Another way would be to create a git repo on a machine, and copy sources from another computer, overwriting the git repo files, or just add them to a new branch, and then use git's merge. For Windows, I prefer Tortoise Git client for doing all the basic versioning stuff.

As for the metadata copy, as suggested by others, you can use rsync -t, cp --preserve=all. For FTP transfers, you can use scp -p.

Я, конечно, планирую использовать Mercurial и обновить его, но дата, которую я в последний раз испортил с одним набором кода, важна для принятия решений, связанных со слиянием. Milind R 9 лет назад 0
0
ITProStuff

Between the two Linux computers you can use rsync, it will keep time stamps as they are.
For Windows you can use robocopy to copy the files without changing the time stamps, maybe you can use it to copy the files from an FTP server in your Linux box to Windows.

Сохраняет ли ftp метаданные файла Milind R 9 лет назад 0
Да, но на FTP-сервере должна поддерживаться команда для сохранения временных отметок. Я не помню, какой была команда, но я думаю, что новые версии FTP-серверов должны ее поддерживать. Попробуйте. ITProStuff 9 лет назад 1
Да, команда MDTM, которая получает время модификации. Milind R 9 лет назад 0
0
Karel Vlk

В Linux (и других Unix-подобных ОС) вы можете копировать файлы на флэш-накопитель и с него или с сервера SMB / FTP с помощью

cp -p 

Это должно сохранить временные метки.

Я не знаю, можно ли сохранить временные метки при загрузке на сервер.

Похожие вопросы