Як скопіювати весь каталог у однойменний каталог без заміни вмісту в каталозі призначення? (замість цього я хотів би додати до вмісту папки призначення)
Як скопіювати весь каталог у однойменний каталог без заміни вмісту в каталозі призначення? (замість цього я хотів би додати до вмісту папки призначення)
Відповіді:
Використовуйте 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щоб отримати значення на основі umask). Якщо файли не мають дозволу на запис відповідно до вашого umask, вам доведеться якось зберігати дозволи, щоб ви могли їх відновити.
(Відповідь Гілла перезаписує існуючі файли, якщо локально вони новіші, я втратив цінні дані таким чином. Не розумію, чому за таку неправильну та шкідливу відповідь так багато голосів).
rsync --ignore-existingпризвело до втрати даних?
find: missing argument to '-exec'використовуючи цю команду, а замість цього довелося використовувати: find . -type f -exec chmod a-w {} \;. Мій linux поганий, ymmv.
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 при розпакуванні його в цільовій системі.
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-скрипті. Створення програми під час виконання є складним і складним (навіть коли це робиться професійними програмістами) з багатьох причин. Створення сценарію оболонки ще гірше - жахлива ідея.