Я хотел бы направить вывод find во входной список scp, как?
23384
user13184
Я начинающий пользователь Linux и пытаюсь отправить длинный список файлов с одного компьютера на другой. Список аргументов слишком длинный, поэтому я использую find. У меня проблемы с настройкой выражения, хотя. Может кто-нибудь помочь?
Вот что я обычно печатаю для короткого списка аргументов.
scp ./* phogan@computer/directory...
Вот я думаю, что это может привести к находке.
scp find . -name "*" phogan@computer/directory...
Может быть, я мог бы использовать трубопровод? Любые предложения помогут. Заранее спасибо.
обычно я собираю все файлы вместе в один большой двоичный объект и вызываю scp всего один раз. что-то вроде этого:
tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
можно поэкспериментировать с параметрами --exclude = или --include = tar. другой вариант будет использовать rsync .
если вы используете пароли с ssh / scp, разве решение с поиском не запрашивает пароль для каждого файла?
quack quixote 15 лет назад
0
давайте просто предположим, что он знает, как использовать ssh-ключи :) проблема с 1000 вопросов о паролях также является причиной tar-подхода
akira 15 лет назад
0
13
Carlos Rodrigues
Вы можете сделать это с помощью одной команды scp.
Убедитесь, что findкоманда заключена в кавычки ` а не в одинарные кавычки ' .
Какая версия scp, какой дистрибутив linux это? Например, scp в Ubuntu 14.04 не имеет этой опции.
geekQ 9 лет назад
0
Привет, старые версии поддерживают его, новые версии поддерживают более простую команду: `` scp` find -название `user @ host:``
Carlos Rodrigues 9 лет назад
2
Не работает с несколькими файлами
Amruta 8 лет назад
1
@Amruta использовать `-r`
slybloty 6 лет назад
0
2
John T
for f in `find . -name "*"`;do scp $f phogan@computer/directory;done
да, он все равно хочет одну команду
John T 15 лет назад
0
полезно, использовал его с `grep -l pattern *`
Tanj 15 лет назад
0
Кажется, не работает с файлами с пробелами в них.
Christophe De Troyer 7 лет назад
0
1
Erik Sjölund
I would suggest
find . -print0 | tar --null --files-from=/dev/stdin -cf - | ssh phogan@computer tar -xf - -C /directory
Note, that this solution avoids having the filenames on the command line where they might be interpreted as command line arguments.
Another thing to watch out for is that filenames might contain spaces. This means that a for loop in bash might have difficulties with a list of filenames.