почему rsync здесь игнорирует более новый каталог?

$SHELL не говорит вам, какую оболочку вы используете, она сообщает вам, что такое переменная окружения SHELL. Bash устанавливает это как путь к вашей оболочке входа в систему, если он еще не установлен.

Вы используете sh(dash, для вас )под sudo, что вы можете легко увидеть, используяpstree:

$ cat test.sh
pstree $$
$./test.sh
bash───pstree
$ sudo./test.sh
sh───pstree

Использование shсоответствует POSIX, хотя эта часть спецификации не является обязательной для вариантов реализации sudo.

readlink /proc/$$/exeтакже подтвердит, что это именно dash. Вы также можете использовать любой другой способ определения работающей оболочки из связанного с вами вопроса.

В тире $'abc'— это одинокий знак доллара, не имеющий значения, за которым следует одна -строка в кавычках -, в основном так же, как foo=$сохраняет знак в любой оболочке.

1
18.01.2021, 11:10
2 ответа

Также необходимо указать-t:

--times, -t              preserve modification times

Так что это должно работать:

rsync -dvnt dir1/ dir2/
0
18.03.2021, 22:36

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

Вы не попросили rsync скопировать какие-либо метаданные. По умолчанию rsync копирует только содержимое. Для каталогов нет содержимого, есть только существование самого каталога :содержимое каталога (файлы внутри него )рассматриваются как отдельные объекты, которые можно копировать независимо (и подвергать фильтрам ). Поскольку testdir7уже существует в целевом дереве, с этим ничего не поделаешь. Если вы хотите скопировать метку времени в каталоге, вам нужно передать опцию -tили -a.

Обратите внимание, что копирование метки времени в каталоге без копирования файлов внутри него редко бывает полезным. Если вы создаете (или удаляете и т. д. )файл в каталоге, это обновляет время модификации каталога. С другой стороны, изменение существующего файла или внесение изменений в каталог не обновляет время изменения каталога. Если вы обновите время модификации dir2/testdir7и , а затем скопируете файлы из dir1/testdir7в dir2/testdir7, время модификации dir2/testdir7будет временем копирования файла. Rsync не будет основывать свое решение о копировании содержимого каталога на метке времени каталога, поскольку она не предоставляет никакой информации о состоянии содержимого каталога.

1
18.03.2021, 22:36

Теги

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