GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich den Befehl 'cp', um ein bestimmtes Verzeichnis auszuschließen?

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.


Linux
  1. So verwenden Sie den Linux-Rsync-Befehl (Remote-Synchronisierung).

  2. So schließen Sie bestimmte Verzeichnisse vom Kopieren in Linux aus

  3. [Linux] :So schließen Sie das Verzeichnis aus, wenn Sie den Shell-Befehl „tar“ verwenden

  4. Wie verwende ich den Rsync-Befehl unter Linux?

  5. So schließen Sie ein Verzeichnis in find aus. Befehl

So verwenden Sie den Linux-cd-Befehl zum Ändern des Verzeichnisses

So verwenden Sie den cd-Befehl unter Linux

So verwenden Sie Rsync

So schließen Sie ein Verzeichnis beim Suchen von Dateien in Linux aus

So verwenden Sie den PS-Befehl

So verwenden Sie den TOP-Befehl