Для версии 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.
Обратите внимание что:
rsync
сценарий.Если все, в чем Вы нуждаетесь, является простым доступом к Вашим файлам, я думаю, что установка выделенного файлового сервера могла бы быть излишеством. Я часто должен получать доступ к файлам из дома, когда я работаю или наоборот и я просто монтирую удаленный объем локально с помощью sshfs
.
Я не попробовал, это на OSX, но согласно их странице, osxfuse должно смочь сделать это. То, что необходимо сделать, передать соответствующий порт (22, например) с маршрутизатора на сервер, затем устанавливают osxfuse и делают что-то как
sshfs server:/path/to/folder /local/path/
Можно затем получить доступ к Вам файлы в/local/path
точно так же, как любой другой смонтированный объем. По-видимому, существует также способ сделать это в Windows, но я никогда не пробовал его.