¿Cómo le digo a tar que solo excluya un directorio de la raíz pero no un directorio con el mismo nombre más profundo en el árbol?

¿Cómo le digo a tar que solo excluya un directorio de la raíz pero no un directorio con el mismo nombre más profundo en el árbol?

Estructura de carpetas:

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

Lo que me gustaría hacer es empaquetar todo excepto la carpeta de configuración raíz y colocarla en un archivo tar en formato deploy. Es importante que la dist/configcarpeta esté presente en la salida. Comenzó con:

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

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

Pero eso resulta en una falta dist/config. La única manera de poder dist/configvenir es si no intento excluir nada llamado config:

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

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

OSX y CentOS (desarrollo y compilación). el hombre paraalquitránMe hace pensar que esto no es posible.

Solucioné esto simplemente eliminando las carpetas que no quiero, ya que se encuentra en un entorno de compilación y los archivos son desechables.

Respuesta1

Podrías usar findpara crear tus argumentos, aunque un poco largo:

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

mindepth 1para excluir .y dos wholenameexclusiones para el directorio en sí, así como su contenido.

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

Respuesta2

Usar una referencia de punto al directorio actual como raíz de archivo es un ancla:

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

Pero si usa un nombre de directorio o un comodín, la --anchoredbandera le ayudará:

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

Respuesta3

Asegúrese de poner --excludeopciones antes de los argumentos de origen y destino.

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

Respuesta4

Puede utilizar ./un marcador al principio de sus archivos excluidos.

Yo lo uso de esta manera:

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

información relacionada