6

Какой самый простой способ rsyncing n новейших файлов в каталоге на удаленном сервере?

2 ответа2

6

Самый простой способ - запустить zsh вместо bash.

rsync -a -- /path/to/directory/*(om[1,42]) remote-server:

В скобках om упорядочивает файлы по времени обратного изменения (т. Е. По возрасту), а [1,42] выбирает первые 42 совпадения.

Если вы хотите только обычные файлы, а не каталоги, добавьте . после открывающей скобки. Дополнительные возможности смотрите в разделе «Глобальные квалификаторы» на справочной странице zshexpn.

Если вы хотите сопоставлять файлы в дереве каталогов с корнем в /path/to/directory , а не просто внутри этого каталога, используйте /path/to/directory/**/*(.om[1,42]) . Тем не менее, все файлы будут отправлены в один и тот же каталог на цели.

2

Предполагая, что вы хотите отправить файлы из текущего рабочего каталога:

rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>

сделает свое дело. Например:

rsync `ls -tp | grep -v / | head -n 10` user@host:/dest/dir/ --progress --compress

Это выдаст ошибку, если в текущем рабочем каталоге нет файлов, или если какой-либо из верхних файлов содержит пробелы или другие специальные символы.

`Символы вокруг ls -tp | grep -v / | head -n <n> указывает bash запустить команды и заменил их результирующим списком файлов в виде списка, разделенного пробелами. Опция -t указывает ls сортировать по отметке времени, -p указывает добавить / после имен каталогов, а часть grep выводит строки, оканчивающиеся на / так что вы не перестанете отправлять каталоги. Добавьте -c к опциям ls , если вы хотите, чтобы новейшие файлы оценивались по времени создания, а не по времени модификации (хотя учтите, что некоторые программы удаляют и заменяют файлы вместо их обновления, поэтому ctime и mtime могут совпадать, даже если файл Кажется, было вокруг дольше).

Я не буду утверждать, что это, без сомнения, самый простой способ, но я бы так и подумал.


(подвопрос mwm в комментарии)

а как же наоборот? сервер на локальный?

Это было бы немного сложнее, так как я не думаю, что вы можете иметь несколько удаленных источников файлов в командной строке rsync, как и локальные. Вы можете запустить rsync на сервере через ssh , открыв туннель обратно к локальному sshd (с тем же вызовом ssh вы запускаете rsync), чтобы получить соединение, по сути, используя ту же команду с другой стороны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .