Я запускаю scp и копирую папку с удаленного сервера, я запускаю с -rl, поэтому я вижу, что файлы копируются, можно ли каким-то образом пропустить текущий файл?
Я запускаю scp и копирую папку с удаленного сервера, я запускаю с -rl, поэтому я вижу, что файлы копируются, можно ли каким-то образом пропустить текущий файл?
Ответы:
Нет, ты не можешь. Но вы можете остановиться scp
и использовать rsync
вместо этого. Он будет копировать только те различия, которые остались от частичной копии, и вы можете исключить любые файлы или каталоги, которые вы не хотите передавать.
rsync -avP -e ssh --exclude=somefile --exclude=somedir ./localdir/ user@server:remotedir/
Нет, не с -r
любым другим синтаксисом, который выполняет несколько передач файлов в рамках одной scp
команды.
При этом scp
также следует парадигме UNIX: пишите программы, которые предоставляют простые и точные функциональные возможности, которые могут быть объединены интересными способами. Это означает, что можно было бы написать цикл, который в интерактивном режиме выполняет отдельные вызовы команды, по одному на файл. После этого вы сможете выйти из отдельных команд во время их выполнения. (Ctrl-C)
Код для этого предоставляется читателю как упражнение, но необходимо подчеркнуть необходимость выполнения этого цикла в интерактивной оболочке. Выход из неинтерактивной оболочки завершит всю работу.
Да, ты можешь!
Давайте перечислим удаленный каталог и скопируем каждый файл отдельно. Затем нажмите Ctrl-C для каждого файла, который вы не хотите копировать:
OLD_IFS="$IFS"
IFS=$'\n'
for file in `ssh user@host ls /remote/directory/`
do echo user@host:/remote/directory/$file /local/directory/
done;
IFS="$OLD_IFS"
OLD_IFS здесь для обработки файлов с пробелами в них.