wie weise ich Tar an, nur ein Verzeichnis vom Stammverzeichnis auszuschließen, nicht aber ein Verzeichnis mit demselben Namen tiefer im Baum?

wie weise ich Tar an, nur ein Verzeichnis vom Stammverzeichnis auszuschließen, nicht aber ein Verzeichnis mit demselben Namen tiefer im Baum?

Ordnerstruktur:

etc (dir)
deploy (dir)
src (dir)
config (dir)
dist
 ├- config (dir) 
 ├- index.js

Ich möchte alles außer dem Stammordner „config“ packen und in einem Tar-Archiv ablegen deploy. Es ist wichtig, dass der dist/configOrdner in der Ausgabe vorhanden ist. Begonnen mit:

tar -czf deploy/deploy.gz   --exclude=deploy  --exclude="./config/"  ./*

$ l ./deploy/deploy0/dist 
index.js
router.js
test

Das führt jedoch zu einem fehlenden dist/config. Ich kann es nur erreichen, dist/configwenn ich nicht versuche, etwas mit dem Namen config auszuschließen:

tar -czf deploy/deploy.gz   --exclude=deploy   ./*

$ l ./deploy/deploy1/dist 
config
index.js
router.js
test

OSX und CentOS (Entwicklung und Build). Der Mann fürTeerlässt mich glauben, dass das nicht möglich ist.

Ich habe dies umgangen, indem ich einfach nicht benötigte Ordner gelöscht habe, da dies eine Build-Umgebung ist und die Dateien entbehrlich sind.

Antwort1

Sie könnten findzur Erstellung Ihrer Argumente Folgendes verwenden (ist allerdings etwas langatmig):

 find -mindepth 1 ! -wholename './config' ! -wholename './config/*'

mindepth 1auszuschließen ., und zwei wholenameAusschlüsse für das Verzeichnis selbst sowie dessen Inhalt.

tar -xzf deploy/deploy.gz --exclude="deploy" \
$( find -mindepth 1 ! -wholename './config' ! -wholename './config/*' )

Antwort2

Die Verwendung eines Punktverweises auf das aktuelle Verzeichnis als Archivstamm ist ein Anker:

tar --exclude='./deploy' --exclude='./config' -cvf deploy/deploy.tar .

Wenn Sie jedoch einen Verzeichnisnamen oder ein Platzhalterzeichen verwenden, --anchoredhilft Ihnen das Flag weiter:

tar --anchored --exclude=deploy --exclude=config -cvf deploy/deploy.tar *

Antwort3

--excludeStellen Sie sicher, dass Sie Optionen vor den Quell- und Zielargumenten angeben .

tar --exclude=deploy --exclude="./config" -cvz deploy/deploy.gz .

Antwort4

Sie können ./am Anfang Ihrer ausgeschlossenen Dateien Markierungen verwenden.

Ich verwende es folgendermaßen:

tar --exclude='./build.tar.gz' --exclude='./config' -czf build.tar.gz .

verwandte Informationen