Proč používat rsync když můžete:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
To předpokládá, že struktura cílového adresáře je stejná jako struktura zdroje.
cp -r `ls -A | grep -v "c"` $HOME/
Pokud by vyloučení určitých vzorů názvů muselo být prováděno každou unixovou souborovou utilitou (jako cp, mv, rm, tar, rsync, scp, ...), došlo by k obrovskému zdvojení úsilí. Místo toho lze takové věci dělat jako součást globbingu, tj. pomocí vašeho shellu.
bash
man 1 bash , / extglob .
Příklad:
$ shopt -s extglob $ echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png $ echo images/!(*.jpg) images/004.bmp images/2252.png
Takže stačí vložit vzorek dovnitř !() a to neguje shodu. Vzor může být libovolně složitý, počínaje výčtem jednotlivých cest (jak ukazuje Vanwaril v jiné odpovědi):!(filename1|path2|etc3) , k věcem podobným regulárnímu výrazu s hvězdami a třídami postav. Podrobnosti naleznete v manuálové stránce.
zsh
man 1 zshexpn , / generování názvu souboru .
Můžete udělat setopt KSH_GLOB a používat bash-jako vzory. Nebo,
% setopt EXTENDED_GLOB % echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png % echo images/*~*.jpg images/004.bmp images/2252.png
Takže x~y odpovídá vzoru x , ale nezahrnuje vzor y . Ještě jednou, úplné podrobnosti viz manuálová stránka.
ryby
Rybí skořápka má na to mnohem hezčí odpověď:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Bonusový pro-tip
Zadejte cp * , stiskněte Ctrl X * a uvidíš, co se stane.
rsync je rychlý a snadný:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Můžete použít --exclude vícekrát.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Všimněte si, že adresář thefoldertoexclude po --exclude možnost je relativní k sourcefolder , tj. sourcefolder/thefoldertoexclude .
Můžete také přidat -n pro suchý běh, abyste viděli, co se zkopíruje před provedením skutečné operace, a pokud je vše v pořádku, odstraňte -n z příkazového řádku.