Il modo più semplice è eseguire zsh invece di bash.
rsync -a -- /path/to/directory/*(om[1,42]) remote-server:
Tra parentesi, om
ordina i file in base all'ora di modifica inversa (ovvero aumentando l'età) e [1,42]
seleziona le prime 42 corrispondenze.
Se vuoi solo file regolari e non directory, aggiungi un .
dopo la parentesi di apertura. Per ulteriori possibilità, guarda sotto "qualificatori globali" nel zshexpn
pagina man.
Se vuoi abbinare i file nell'albero delle directory radicato in /path/to/directory
, piuttosto che solo all'interno di quella directory, usa /path/to/directory/**/*(.om[1,42])
. Questo però invierà tutti i file alla stessa directory sulla destinazione.
Supponendo che tu voglia inviare file dalla directory di lavoro corrente:
rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>
farà il trucco. Ad esempio:
rsync `ls -tp | grep -v / | head -n 10` [email protected]:/dest/dir/ --progress --compress
Questo darà un errore se non ci sono file da trovare nella directory di lavoro corrente, o se uno dei file principali contiene spazi o altri caratteri speciali.
I caratteri ` attorno a ls -tp | grep -v / | head -n <n>
dire a bash di eseguire i comandi e di sostituirli con l'elenco di file risultante come elenco separato da spazi. Il -t
opzione indica ls
per ordinare per timestamp, il -p
gli dice di aggiungere un /
dopo i nomi delle directory e la parte grep filtra le righe che terminano con /
quindi non finisci per inviare directory. Aggiungi -c
al ls
opzioni se vuoi che i file più recenti vengano giudicati in base all'ora di creazione anziché a quella di modifica (nota però che alcuni programmi rimuoveranno e sostituiranno i file invece di aggiornarli quindi ctime e mtime possono essere gli stessi anche se un file sembra esistere da più tempo ).
Non pretendo che sia senza dubbio il più semplice modo, ma sarebbe il modo in cui avrei pensato per la prima volta.
(sotto-domanda-in-un-commento di mwm)
e il contrario? server in locale?
Sarebbe un po 'più complesso in quanto non penso che tu possa avere più fonti di file remote sulla riga di comando rsync come puoi fare con quelle locali. Potresti eseguire rsync
sul server tramite ssh
, aprendo un tunnel per tornare al tuo sshd
locale (con lo stesso ssh
invocazione tramite cui esegui rsync) per ricevere la connessione, essenzialmente usava lo stesso comando dall'altra parte.