Какой самый простой способ rsyncing n новейших файлов в каталоге на удаленном сервере?
2 ответа
Самый простой способ - запустить 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])
. Тем не менее, все файлы будут отправлены в один и тот же каталог на цели.
Предполагая, что вы хотите отправить файлы из текущего рабочего каталога:
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), чтобы получить соединение, по сути, используя ту же команду с другой стороны.