Как скопировать весь каталог в одноименный каталог без замены содержимого в целевом каталоге? (вместо этого я хотел бы добавить к содержимому папки назначения)
Как скопировать весь каталог в одноименный каталог без замены содержимого в целевом каталоге? (вместо этого я хотел бы добавить к содержимому папки назначения)
Ответы:
Используйте 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. Генерировать программу во время выполнения сложно и сложно (даже если это делают профессиональные программисты) по многим причинам. Создание сценария оболочки еще хуже - ужасная идея.