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.