Как мне scp файлы размером меньше x?

13

Я что-то разрабатываю на своем ноутбуке и копирую файлы на высокопроизводительный ПК (сервер без монитора). Из-за лени я просто делаю это в настоящее время (на ноутбуке):

scp -r ~/project/* server:~/project/

Однако некоторые файлы в каталоге проекта - это некоторые файлы журнала и файлы, которые мне не нужно отправлять, которые иногда могут быть концертом или около того. То, что я хотел бы, это хорошая чистая команда, которая в основном делает то же самое (передает все файлы в проекте и его подкаталогах), но отправляет файлы только с определенным пороговым размером файла, например, 100 МБ. У меня небольшой опыт работы с bash, а с regexp - совсем нет, поэтому я не имею ни малейшего представления, как это сделать без какого-либо сложного метода, такого как импорт sys в python и использование множества if и сравнений.

iammax
источник

Ответы:

27

Вы можете использовать команду «rsync», которая имеет возможность контролировать размер файла, который будет исключен.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

от ' man rsync ',

--max-size=SIZE    don't transfer any file larger than SIZE

Обновленный ответ : просто исключите файлы журнала с помощью опции rsync --exclude, как показано ниже

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

или вы можете использовать комбинацию команд 'find' с 'scp' и указать ограничение размера файла с его -sizeопцией. используйте ! -name '*.log'для исключения определенных файлов, заканчивающихся на 'log'.

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
αғsнιη
источник
1
Примечание для OP: rsyncаналогично scp, но более эффективно, поскольку передает изменения только в случае изменения файла.
Пэдди Ландау
будьте осторожны с порядком каталогов какrsync -rv --max-size SOURCE DESTINATION. Я не читал правильно, и это может иметь очень плохие последствия.
toto_tico