Как скопировать все файлы из каталога в удаленный каталог с помощью scp?

68

Моя цель - скопировать только все файлы из ~ / local_dir в user@host.com / var / www / html / target_dir с помощью scp и не создавать категорию local_dir в local_dir.

/var/www/html/target_dir/files..

но нет

/var/www/html/target_dir/local_dir/files.. при использовании параметра -r

Эдгарас Карка
источник
1
Не scp * user@host.com:/var/www/html/target_dirделает то, что вы хотите? Если это так, пожалуйста, отредактируйте более подробно то, что вы пытаетесь сделать и пытались до сих пор
Майкл Гомер
Добавление /. больше не работает. Больше здесь
Цулаци Тамим

Ответы:

91

scp имеет аргумент -r. Итак, попробуйте использовать:

$ scp -r ~/local_dir user@host.com:/var/www/html/target_dir

Аргумент -r работает так же, как -r arg в cp, он перенесет всю вашу папку и все файлы и подкаталоги внутри.

parazyd
источник
5
Ваша команда создала local_dirкаталог в / var / www / html / target_dir, моя цель - копировать только файлы.
Эдгарас Карка
Извините, я неправильно понял. Затем просто повторите команду, но так: $ scp -r ~/local_dir user@host.com:/var/www/html/Затем переименуйте новый каталог, если это необходимо.
parazyd
8
Или все, $ scp -r ~/local_dir/* user@host.com:/var/www/html/target_dirчто плавает на вашей лодке.
Parazyd
Как исключить определенные каталоги из локальных при копировании в удаленный
Sushivam
13
Измените подстановочный знак *на точку, .и вы скопируете содержимое каталога (включая любые файлы точек), не копируя сам каталог. scp -pr ~/local_dir/. user@example.com:/path/to/target_dir
Ройма
19

Если ваша цель состоит в том, чтобы перенести все файлы из local_dirв *групповом символе делает трюк:

$ scp ~/local_dir/* user@host.com:/var/www/html/target_dir

Параметр -rозначает «рекурсивно», поэтому вы должны написать его, когда пытаетесь передать весь каталог или несколько каталогов.

От man scp:

-r 
Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.

Так что если у вас есть подкаталоги внутри local_dir, последний пример будет только передавать файлы, но если вы установите -rопцию, он будет передавать файлы и каталоги.

tachomi
источник
1+ Потому что вам нужно прочитать комментарии в принятом ответе, чтобы получить правильный ответ, а этот просто объясняет это напрямую.
Андре Кристоффер Андерсен
17

При добавлении /.в исходный каталог его содержимое будет перенесено вместо самого каталога. В отличие от решения с подстановочными знаками, оно будет также включать любые скрытые файлы.

$ scp -r ~/local_dir/. user@host.com:/var/www/html/target_dir

Кредит на это решение переходит к roaima, но я подумал, что его следует публиковать как реальный ответ, а не только как комментарий.

raphinesse
источник
0

Следуй этим шагам:

  1. Скопируйте каталог local_dirсо всеми его подкаталогами:

    scp -r ~/local_dir user@host.com /var/www/html/target_dir
    
  2. скопируйте только содержимое, local_dirа не сам каталог local_dir:

    scp -r ~/local_dir/* user@host.com /var/www/html/target_dir
    
  3. Не используйте: scp -r ~/local_dir/. user@host.com /var/www/html/target_dirтак как выдает ошибку (только что проверил и получил следующую ошибку):

    scp: error: unexpected filename: .
    
Сайед Фараз Умар
источник