Основанный на Linux интернет-файловый сервер

Для версии 3.3 или позже diff, необходимо использовать --no-dereference опция, как описано в ответе Pete Harlan.

К сожалению, более старые версии diff не поддерживайте символьные ссылки игнорирования:

Некоторые файлы не являются ни каталогами, ни регулярными файлами: они - необычные файлы как символьные ссылки, устройство специальные файлы, именованные каналы и сокеты. В настоящее время, diff символьные ссылки обработок как регулярные файлы; это рассматривает другие специальные файлы как регулярные файлы, если они указаны на верхнем уровне, но просто сообщает об их присутствии при сравнении каталогов. Это означает это patch не может представить изменения в таких файлах. Например, если Вы изменяетесь, которые регистрируют символьную ссылку точки, diff производит различие между этими двумя файлами, вместо изменения в символьной ссылке.

diff должны дополнительно сообщить изменения в специальных файлах особенно, и patch должен быть расширен для понимания этих расширений.

Если все, что Вы хотите, должно проверить rsync (и по-видимому зафиксировать то, что отсутствует), то Вы могли просто работать, rsync управляют во второй раз. Если Вы не хотите делать это, то вычисление контрольной суммы каталог может быть достаточным.

Если Вы действительно хотите сделать это с diff, затем можно использовать find пропускать символьные ссылки и выполнять разность на каждом файле индивидуально. Передайте свои каталоги a и b в как аргументы:

#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
    # Suppress details of differences
    diff -rq $f $2/${f##*/}
done

или как острота:

for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done

Это определит файлы, которые отличаются по содержанию или файлам, которые находятся в a, но не в b.

Обратите внимание что:

  • так как мы пропускаем символьные ссылки полностью, это не заметит, не присутствуют ли имена символьной ссылки в b. Если бы Вы потребовали, чтобы, Вам была бы нужна вторая передача находки, чтобы определить все символьные ссылки и затем явно проверить на их существование в b.
  • Дополнительные файлы в b не будут определены, так как список создается из содержания a. Это, вероятно, не проблема для Вашего rsync сценарий.

1
12.09.2013, 14:21
1 ответ

Если все, в чем Вы нуждаетесь, является простым доступом к Вашим файлам, я думаю, что установка выделенного файлового сервера могла бы быть излишеством. Я часто должен получать доступ к файлам из дома, когда я работаю или наоборот и я просто монтирую удаленный объем локально с помощью sshfs.

Я не попробовал, это на OSX, но согласно их странице, osxfuse должно смочь сделать это. То, что необходимо сделать, передать соответствующий порт (22, например) с маршрутизатора на сервер, затем устанавливают osxfuse и делают что-то как

sshfs server:/path/to/folder /local/path/

Можно затем получить доступ к Вам файлы в/local/path точно так же, как любой другой смонтированный объем. По-видимому, существует также способ сделать это в Windows, но я никогда не пробовал его.

0
28.01.2020, 02:03
  • 1
    Это походит на хорошее решение, однако действительно ли возможно соединиться с sshfs "сервером", ничего не устанавливая? И я также столкнулся с NFS, который, кажется, делает что-то подобное, это будет подходящая альтернатива, поскольку это, кажется, реализовано в OSX? –  Ridago 12.09.2013, 23:40
  • 2
    @Ridago пока сервер имеет ssh выполнение сервера (это должно), затем, Вы ничего не должны устанавливать на сервере. NFS является большим, но Вы должны базироваться доступ к серверу. –  terdon♦ 13.09.2013, 00:08

Теги

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