Я делаю передачу данных, старая файловая система глубоко опирается на каталог, который сейчас находится по другому пути. Это каталог git, в котором хранится код онлайн. Я не имею права перемещать или переименовывать его.
Так что я могу сделать это rsync этот каталог по тому же старому пути. Но имя каталога также изменилось.
Есть ли простой способ, которым я могу rsync каталог в целевой каталог с другим именем?
src
каталог вdest
каталогеrsync
я когда-либо использовал. Если это действительно происходит с вами, вы пропускаете косую черту в конце аргумента исходного каталога.dest
это symlnk дляsrc
, а вместо этого заканчивается копированиеsrc
вsrc/src
. Проверено на macOS. Надеялся , что я мог бы заменитьbar -> foo/
сbar/
, но пришлось использовать промежуточный временный каталог.dest
это символическая ссылкаsrc
, простоrm dest
перед запуском вышеупомянутой команды.rsync
достаточно умен, чтобы создать,dest
прежде чем копировать содержимоеsrc
. Вам не нужен промежуточный временный каталог.Если старая и новая файловые системы доступны для вашего компьютера, рассмотрите возможность использования символической ссылки вместо rsync. Если ваша команда rsync, которую вы используете, не указывает хосты (или если это один и тот же хост), то это именно тот случай. Вы пытаетесь отразить две директории с разными именами на одном хосте. Не используйте для этого rsync, так как вы дублируете данные, и вам придется часто запускать rsync для их синхронизации.
Использование символической ссылки - это одноразовое исправление, которое будет отражать две директории (с разными именами) и почти не требует места. Это похоже на создание каталога псевдонимов, который указывает на другой каталог.
Допустим, у вас был старый git в каталоге / old / path / old_git, а теперь хранилище кода перемещено в / new / path / new_git
Ты можешь сделать:
Это создаст ссылку как таковую:
/ old / path / old_git -> / new / path / new_git
Таким образом, все, что помещено в new_git, будет немедленно доступно и по-старому, без дублирования данных и без необходимости их постоянной синхронизации.
источник
Я нахожу альтернативное решение сейчас.
Использование
rysnc -r /origin/* /target/
может синхронизировать все содержимое из исходного каталога в целевой каталог.источник
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. Как указал @RayBurgemeestre, расширение оболочки не будет содержать точечных файлов.