Как скопировать весь каталог в одноименный каталог без замены содержимого в целевом каталоге? (вместо этого я хотел бы добавить к содержимому папки назначения)
Как скопировать весь каталог в одноименный каталог без замены содержимого в целевом каталоге? (вместо этого я хотел бы добавить к содержимому папки назначения)
Ответы:
Используйте rsync
и передайте, -u
если вы хотите обновить только файлы, которые новее в исходном каталоге, или --ignore-existing
пропустить все файлы, которые уже существуют в месте назначения.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Обратите внимание /
на исходную сторону: без этого rsync
создастся /remote/directory/directory
.)
--ignore-existing
добавить без замены, какую потерю данных вы видите?
rsync
легко доступна .... (Как Win32-OpenSSH)
--rsync-path
)
scp перезапишет файлы, если у вас есть права на запись в них.
Другими словами: Вы можете scp
эффективно пропустить указанные файлы, временно удалив разрешения на запись для них (если вы являетесь владельцем файлов, то есть).
scp -r user@server.com:/location/of/files/* /local/location/
Вы можете копировать только новые файлы по дате. использованиеfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Если вы можете сделать содержимое файла назначения доступным только для чтения:
find . -type f -exec chmod a-w '{}' \;
перед запуском scp
(будет пожаловаться и пропустить существующие файлы).
И измените их обратно потом ( chmod +w
чтобы получить значение на основе масок). Если не все файлы имеют разрешение на запись в соответствии с вашей маской, вам нужно каким-то образом хранить разрешения, чтобы их можно было восстановить.
(Ответ Жиля перезаписывает существующие файлы, если локально они более новые, я потерял ценные данные таким образом. Не понимаю, почему этот неправильный и вредный ответ имеет так много голосов).
rsync --ignore-existing
вы потеряли данные?
find: missing argument to '-exec'
используя эту команду, а вместо этого пришлось использовать: find . -type f -exec chmod a-w {} \;
. Мой Linux плох, мммм.
find . -type f -exec chmod a-w {} \;
У меня была похожая задача, в моем случае я не мог использовать rsync
, csync
или FUSE , потому что мое хранилище имеет только SFTP. rsync
Не удалось изменить дату и время для файла, некоторые другие утилиты (например csync
) показывали мне другие ошибки: « Невозможно создать временный файл Обнаружен перекос часов ».
Если у вас есть доступ к хранилищу-серверу - просто установите openssh-server
или запустите здесь rsync
как демон.
В моем случае - я не мог этого сделать, и решение было: lftp . lftp
Использование для синхронизации приведено ниже:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder
- это папка на моем компьютере, /rem/folder
- есть sftp://sft.domain.tld/rem/folder
.
Вы можете найти справочные страницы по ссылке: http://lftp.yar.ru/lftp-man.html
Чтобы скопировать целую кучу файлов, их быстрее смолить. Используя -k, вы также предотвращаете перезапись файлов при распаковке в целевой системе.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scp
перезаписывает файлы, и нет никакого переключателя, чтобы остановить это, но вы можете скопировать все как есть, выполнить scp, а затем скопировать существующие файлы обратно. Примеры:
Скопируйте все существующие файлы в путь
mkdir original_files ; cp -r * original_files/
Скопируйте все используя scp
scp -r user@server:dir/* ./
Скопируйте исходные файлы поверх всего, что написал scp:
cp -r original_files/* ./
Еще один способ добиться этого - создать ls
папку назначения:
В папке удаленного назначения:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
По источнику:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
По назначению:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
-
>
пробел новой строки или другие специальные символы. 3. Жесткий код цикла for в скрипте Python. Генерировать программу во время выполнения сложно и сложно (даже если это делают профессиональные программисты) по многим причинам. Создание сценария оболочки еще хуже - ужасная идея.