Ich versuche, ein einfaches Bash-Skript zu schreiben, das den gesamten Inhalt eines Ordners einschließlich versteckter Dateien und Ordner in einen anderen Ordner kopiert, möchte jedoch bestimmte Ordner ausschließen. Wie könnte ich das erreichen?
197
cp -R !(dir1|dir2) path/to/destination
!(dir1|dir2)
Muster aktiviertextglob
sein muss (shopt -s extglob
um es einzuschalten).Antworten:
Verwenden Sie rsync:
Beachten Sie, dass die Verwendung von
source
undsource/
unterschiedlich sind. Slash Mittel , um die Inhalte des Ordners zu kopierensource
indestination
. Ohne den abschließenden Schrägstrich bedeutet dies, dass der Ordnersource
in kopiert wirddestination
.Alternativ können Sie , wenn Sie viele Verzeichnisse (oder Dateien) müssen auszuschließen, verwenden Sie
--exclude-from=FILE
, woFILE
ist der Name einer Datei , Dateien oder Verzeichnisse enthalten , auszuschließen.--exclude
kann auch Platzhalter enthalten, wie z--exclude=*/.svn*
quelle
rsync -av --exclude='.git/' ../old-repo/ .
Verwenden Sie Teer zusammen mit einem Rohr.
Sie können diese Technik sogar für ssh verwenden.
quelle
Sie können
find
mit dem verwenden-prune
Option verwenden.Ein Beispiel aus
man find
:quelle
cpio
wurde noch nicht für MSYS2 gepackt.Sie können tar mit der Option --exclude verwenden und dann im Ziel entpacken. z.B
Weitere Informationen finden Sie in der Manpage von tar
quelle
Ähnlich wie Jeffs Idee (ungetestet):
quelle
/usr/share/icons
und bin sofort dahin gekommen,find: paths must precede expression: 22x22
wo letzteres eines der Unterverzeichnisse darin ist . Mein Befehl warfind . -name * -print0 | grep -v "scalable" | xargs -0 -I {} cp -a {} /z/test/
(zugegeben, ich bin auf MSYS2, also wirklich in/mingw64/share/icons/Adwaita
, aber ich kann nicht sehen, wie dies die Schuld von MSYS2 ist)Ungetestet...
quelle
Inspiriert von der Antwort von @ SteveLazaridis, die fehlschlagen würde, ist hier eine POSIX-Shell-Funktion - kopieren Sie sie einfach und fügen Sie sie in eine Datei mit dem Namen
cpx
yout ein$PATH
und machen Sie sie ausführbar (chmod a+x cpr
). [Die Quelle wird jetzt in meinem GitLab gepflegt .Anwendungsbeispiel
quelle