Як скопіювати всі файли та каталоги, за винятком певних файлів через ssh?


23

Використовуючи командний рядок Linux, я використовую scpкоманду, щоб скопіювати всі файли та папки з певного каталогу. Однак я не люблю споживати пропускну здатність, для копіювання речей я рідко змінююсь, як моя tiny_mceпапка. У чому хитрість копіювати все, але пропустити короткий список папок?

Відповіді:


19

rsyncпрацює добре, і в більшості випадків використовує SSH автоматично як транспортний протокол. Він буде порівнювати файли та завантажувати лише ті, що змінилися - але ви також можете скористатися списком виключень, щоб вказати файли в дереві, які не повинні так чи інакше бути синхронізовані.


rsync не використовує SSH автоматично - для цього вам потрібно надати прапори "-e ssh".

4
Так. Випущено Rsync 2.6.0 - віддалена оболонка за замовчуванням тепер "ssh", якщо ви не скажете конфігурації, що хочете зробити щось інше за замовчуванням. samba.org/rsync

12

Ви можете спробувати rsync, який копіює лише файли, які були змінені, а також працює над ssh.


9

Тут використовується rsync --excludeбільш очевидний вибір, але якщо ви дійсно хочете просто надіслати кілька файлів або папок і мати щось конкретне для виключення, ви можете скористатися обширкою оболонок scp. Спочатку переконайтеся, що у вашій оболонці встановлені правильні параметри глобалізації. Для bash run shopt -s extglobта zsh setopt ksh_glob. Тоді щось подібне:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

... скопіював би все у вихідну папку, крім речей, що відповідають заданому шаблону. Очевидно, ви можете бути творчими з цією частиною.


7

rsync є хорошим рішенням, але якщо ви шукаєте альтернативу:

Скажімо, у нас каталог "тест" містить каталоги "foo, bar, baz". У цих режимах є купа різних типів файлів:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

Ми хочемо скопіювати все, крім PNG

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

У цьому прикладі команда помістить усі файли в один і той же каталог призначення - це може бути не поведінка, яку ви хочете.


1
Зауважте, що ця відповідь працює лише в тому випадку, якщо в іменах файлів та каталогів відсутні спеціальні символи оболонки (пробіл або \[*?).
Жил 'ТАК - перестань бути злим'

3

Чудовий інструмент, який ви можете спробувати - це "lftp".

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

Ви також можете використовувати RSync через ssh

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

Треба працювати.


0

Я щойно закінчив писати, як я віддаю перевагу унісон rsync будь-якого дня, оскільки це

  • не потрібен демон, крім ssh для транспорту
  • дозволяє мені будь-коли змінювати файли з будь-якої сторони - декілька майстрів легко, тоді як мені потрібно лише натиснути запит на синхронізацію з одного боку
  • Я є стикером, коли справа стосується часу, атрибутів / дозволів, програмних посилань тощо. Немає проблем з цим; для одного проекту я навіть використовую 4 дзеркала, одне з них - хост cygwin. Дивіться мій приклад налаштування crontab.
  • підтримує виключення типу *.bak. Зразки в моєму конфігураційному файлі

0

Використання захищеної копії - scp

scp -r file user@host:

Щоб скопіювати багато файлів

scp /directory/* user@host:destinationPath

Щоб скопіювати деякі файли

scp /directory/!(*.doc) user@host:destinationPath

Він копіює вміст каталогу, крім файлів .doc


0

Я б точно рекомендував вам rsync.

rsync -vra --exclude = "те, що ви хочете виключити" -e ssh папка user @ remotehost: / папка


0

Це те, що працювало для мене, коли я запускав його з сервера призначення.

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

Ми можемо зробити це в два етапи, щоб ігнорувати tiny_mceкаталог. Якщо припустити, що всі каталоги починаються з малих літер.

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

Крім того, змініть USER, HOSTNAME і FOLDER на реальні значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.