Nejjednodušší způsob je spustit zsh místo bash.
rsync -a -- /path/to/directory/*(om[1,42]) remote-server:
V závorce om
seřadí soubory podle času zpětné úpravy (tj. podle rostoucího věku) a [1,42]
vybere prvních 42 shod.
Pokud chcete pouze běžné soubory a ne adresáře, přidejte .
za úvodní závorkou. Další možnosti naleznete v části „glob qualifiers“ v zshexpn
manuálová stránka.
Pokud chcete porovnat soubory ve stromu adresářů s kořenem /path/to/directory
, spíše než uvnitř tohoto adresáře použijte /path/to/directory/**/*(.om[1,42])
. To však odešle všechny soubory do stejného adresáře v cíli.
Za předpokladu, že chcete odesílat soubory z aktuálního pracovního adresáře:
rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>
udělá ten trik. Například:
rsync `ls -tp | grep -v / | head -n 10` [email protected]:/dest/dir/ --progress --compress
Pokud v aktuálním pracovním adresáři nejsou žádné soubory, nebo pokud některý z horních souborů obsahuje mezery nebo jiné speciální znaky, zobrazí se chyba.
Znaky ` kolem ls -tp | grep -v / | head -n <n>
řekni bash, aby spustil příkazy a nahradil je výsledným seznamem souborů jako seznamem odděleným mezerou. -t
volba říká ls
pro řazení podle časového razítka -p
říká, že má přidat /
za názvy adresářů a část grep vyloučí řádky končící /
abyste nakonec neposílali adresáře. Přidejte -c
na ls
možnosti, pokud chcete, aby byly nejnovější soubory posuzovány podle času vytvoření místo času modifikace (i když mějte na paměti, že některé programy soubory odstraní a nahradí je místo aktualizace, takže ctime a mtime mohou být stejné, i když se zdá, že soubor existuje déle ).
Nebudu tvrdit, že je to bezpochyby nejjednodušší způsobem, ale byl by to způsob, který by mě napadl jako první.
(podotázka mwm v komentáři)
a co naopak? server na místní?
To by bylo trochu složitější, protože si nemyslím, že na příkazovém řádku rsync můžete mít více vzdálených zdrojů souborů, jako můžete ty místní. Můžete spustit rsync
na serveru přes ssh
, čímž se otevře tunel zpět do vašeho místního sshd
(se stejným ssh
vyvolání, přes které spustíte rsync), abyste získali připojení, v podstatě použili stejný příkaz z druhé strany.