tar: "No se puede stat" cuando se presentan argumentos como variables de shell

1

Tengo algunos directorios en una ubicación, la ruta absoluta de esa ubicación se almacena PROJECT_HOME. Ahora, estoy tratando de hacer lo siguiente en un script:

TARGET_LIST="bin lib scripts deployment"
tar -czf project.tar.gz -C "$PROJECT_HOME" "$TARGET_LIST"

pero el alquitrán me da lo siguiente:

tar: bin lib scripts deployment: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors

El comando tar funciona si sustituyo los valores de TARGET_LIST( tar -czf project.tar.gz -C "$PROJECT_HOME" lib bin scripts deployment), pero no cuando uso la variable.

¿Qué estoy haciendo mal?

Saadat
fuente

Respuestas:

1

Al poner $TARGET_LISTentre comillas, está definiendo un argumento único con espacios. tar está buscando un solo archivo / carpeta llamado 'despliegue de scripts bin lib'.

Probar con

tar -czf project.tar.gz -C $PROJECT_HOME $TARGET_LIST

sin las comillas

EDITAR Si tiene espacios en los nombres de archivo o directorio, debe usar matrices (como lo sugiere Ignacio)

Ejemplo

TARGET_LIST=(bin lib scripts deployment "a directory with spaces")
tar -czf project.tar.gz -C $PROJECT_HOME "${TARGET_LIST[@]}"
Matteo
fuente
@Saadat: solo hasta que golpees algo con espacios en blanco.
Ignacio Vazquez-Abrams
1

Tiene el problema opuesto al descrito en la entrada # 50 de BASH FAQ . Afortunadamente, la solución es la misma: use una matriz.

Ignacio Vazquez-Abrams
fuente