GNU/Linux >> Linux Esercitazione >  >> Linux

rsync N file più recenti in una directory

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.


Linux
  1. Linux:eliminare in modo efficiente una directory di grandi dimensioni contenente migliaia di file?

  2. Rinominare i file nella directory?

  3. Rsync sta cambiando le autorizzazioni della directory?

  4. Copiare i primi N file in una directory diversa?

  5. Utilizzo di rsync per sincronizzare i file

Come contare i file nella directory in Linux

Esempi di Rsync per trasferire file in Linux

Come usare Rsync

Come contare i file nella directory su Linux

Conta il numero di file in una directory in Linux

Esempi di comandi Linux rsync