Я запускаю 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 предназначен для обработки файлов с пробелами.