Warum rsync
verwenden? wenn Sie tun können:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Dies setzt voraus, dass die Zielverzeichnisstruktur dieselbe ist wie die der Quelle.
cp -r `ls -A | grep -v "c"` $HOME/
Nun, wenn der Ausschluss bestimmter Dateinamenmuster von jedem Unix-ähnlichen Dateidienstprogramm (wie cp, mv, rm, tar, rsync, scp, ...) durchgeführt werden müsste, würde eine immense Verdoppelung des Aufwands auftreten. Stattdessen können solche Dinge als Teil des Globbings ausgeführt werden, d. h. von Ihrer Shell.
Bash
man 1 bash
, / extglob .
Beispiel:
$ 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
Sie fügen also einfach ein Muster in !()
ein , und es negiert die Übereinstimmung. Das Muster kann beliebig komplex sein, beginnend mit der Aufzählung einzelner Pfade (wie Vanwaril in einer anderen Antwort zeigt):!(filename1|path2|etc3)
, zu Regex-ähnlichen Dingen mit Sternen und Zeichenklassen. Weitere Informationen finden Sie auf der Manpage.
zsh
man 1 zshexpn
, / Dateinamengenerierung .
Sie können setopt KSH_GLOB
tun und Bash-ähnliche Muster verwenden. Oder,
% 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
Also x~y
stimmt mit Muster x
überein , schließt aber das Muster y
aus . Auch hier finden Sie alle Details in der Manpage.
Fisch
Die Fischschale hat darauf eine viel hübschere Antwort:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Bonus-Profi-Tipp
Geben Sie cp *
ein , drücken Sie Strg X * und schau einfach was passiert.
rsync
ist schnell und einfach:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Sie können --exclude
verwenden mehrmals.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Beachten Sie, dass das Verzeichnis thefoldertoexclude
nach --exclude
Option ist relativ zu sourcefolder
, also sourcefolder/thefoldertoexclude
.
Sie können auch -n
hinzufügen für einen Trockenlauf, um zu sehen, was kopiert wird, bevor der eigentliche Betrieb ausgeführt wird, und wenn alles in Ordnung ist, entfernen Sie -n
von der Befehlszeile.